在我的WPF窗口(.NET 4.0)中,网格包含两列:左侧的拉伸文本框(或其他内容)和右侧的Expander。同样在Expander中,我有GridSplitter,它用于在Expander扩展时调整左右列的大小。但这是行不通的。
这是我的XAML代码:
<Window x:Class="WpfApplication10.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid ShowGridLines="True" >
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" Name="column"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" HorizontalAlignment="Stretch" TextWrapping="Wrap"
Text="TextBox" VerticalAlignment="Stretch" Background="Aqua"/>
<Expander Grid.Column="1" Header="Expander" ExpandDirection="Left"
HorizontalAlignment="Right" Background="LightBlue" >
<Expander.Content>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="Some text Some text Some Text" Grid.Column="1"/>
<GridSplitter Grid.Column="0" Width="5"
ResizeBehavior="PreviousAndCurrent"
ResizeDirection="Columns"
HorizontalAlignment="Stretch"/>
</Grid>
</Expander.Content>
</Expander>
</Grid></Window>
找到合适的解决方案。XAML:
<Window x:Class="WpfApplication10.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVisConverter"/>
</Window.Resources>
<Grid ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" Name="leftColumn"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto" Name="rightColumn" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0"
HorizontalAlignment="Stretch"
TextWrapping="Wrap"
Text="TextBox"
VerticalAlignment="Stretch"
Background="Aqua" />
<Expander Grid.Column="2"
Name="Expander"
Header="Expander"
ExpandDirection="Left"
Background="LightBlue"
Collapsed="Expander_Collapsed"
Expanded="Expander_Expanded" >
<TextBlock Text="Some text Some text Some Text" />
</Expander>
<GridSplitter Grid.Column="1"
Width="5"
ResizeBehavior="PreviousAndNext"
ResizeDirection="Columns"
VerticalAlignment="Stretch"
Height="Auto"
Visibility="{Binding ElementName=Expander, Path=IsExpanded,
Converter={StaticResource BoolToVisConverter}}"/>
</Grid></Window>
后台代码:
private void Expander_Collapsed(object sender, RoutedEventArgs e)
{
leftColumn.Width = new GridLength(1, GridUnitType.Star);
rightColumn.Width = new GridLength(1, GridUnitType.Auto);
}
private void Expander_Expanded(object sender, RoutedEventArgs e)
{
rightColumn.Width = new GridLength(1, GridUnitType.Star);
}
您的网格拆分器在内部网格(在扩展器中)上工作,而不在主网格上工作。试试这个:
<Window x:Class="WpfApplication10.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Height="350"
Width="525">
<Grid ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="5" />
<ColumnDefinition Width="Auto"
Name="column" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0"
HorizontalAlignment="Stretch"
TextWrapping="Wrap"
Text="TextBox"
VerticalAlignment="Stretch"
Background="Aqua" />
<Expander Grid.Column="2"
Header="Expander"
ExpandDirection="Left"
Background="LightBlue">
<TextBlock Text="Some text Some text Some Text" />
</Expander>
<GridSplitter Grid.Column="1"
Width="5"
ResizeBehavior="PreviousAndNext"
ResizeDirection="Columns"
VerticalAlignment="Stretch"
Height="Auto" />
</Grid>
</Window>
现在,您需要处理用户展开/折叠扩展器时最后一列发生的情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句