我有一个带网格分割器的网格(2行),分割器位于第二行。
我想将第二行高度绑定到一个成员,因此我可以通过单击按钮来控制视图: 在开始时,视图仅显示第一行,当按钮单击时,视图显示两行,分割器位于中间,然后另一次单击第二行,分割器随着状态处于开始状态而下降。
我做到了,但只有在不使用分割器的情况下才有效。 使用分割器后,绑定停止。
有什么问题?
答案 0 :(得分:1)
要将GridSplitter恢复到orignal位置,请将RowDefinition Height绑定到GridSplitter之间的Grid.RowDefinitions。注意,我通常也将GridSplitter放在它自己的Grid RowDefinition中,高度= Auto。
我在下面包含了RowDefinition Height和Button命令的绑定,其他一切只是我用于显示目的的一些数据。 您也可以通过Button Click事件的代码绑定来完成此操作。
这是XAML:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="{Binding Path=Row0GridHeight, Mode=TwoWay}"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="{Binding Path=Row2GridHeight, Mode=TwoWay}" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<TextBox Text="Enter text here"/>
<Button Content="Click"
VerticalAlignment="Top"
Height="23"
Command="{Binding Path=ToggleViewCommand}"/>
</StackPanel>
<GridSplitter Grid.Row="1"
ResizeBehavior="PreviousAndNext"
HorizontalAlignment="Stretch"
ResizeDirection="Rows"
Height="5"/>
<Grid Grid.Row="2">
<ListBox>
<ListBox.Items>
<TextBlock Text="Choice 1"/>
<TextBlock Text="Choice 2"/>
<TextBlock Text="Choice 3"/>
<TextBlock Text="Choice 4"/>
<TextBlock Text="Choice 5"/>
</ListBox.Items>
</ListBox>
</Grid>
</Grid>
这是RowDefinition高度绑定:
private GridLength _row0GridHeight = new GridLength(1, GridUnitType.Star);
public GridLength Row0GridHeight
{
get
{
return _row0GridHeight;
}
set
{
_row0GridHeight = value;
NotifyPropertyChanged("Row0GridHeight");
}
}
private GridLength _row2GridHeight = new GridLength(0, GridUnitType.Star);
public GridLength Row2GridHeight
{
get
{
return _row2GridHeight;
}
set
{
_row2GridHeight = value;
NotifyPropertyChanged("Row2GridHeight");
}
}
这是Button的Command绑定(实现ICommand):
private void ExecuteToggleViewCommand(Object args)
{
if ( _row2GridHeight.Value == 1)
{
Row2GridHeight = new GridLength(0, GridUnitType.Star);
}
else
{
Row0GridHeight = new GridLength(1, GridUnitType.Star);
Row2GridHeight = new GridLength(1, GridUnitType.Star);
}
}
答案 1 :(得分:-1)
你有3排吧?我认为拆分器在中间行