移动分割器后,网格行高度绑定停止绑定

时间:2010-10-11 11:54:48

标签: wpf binding

我有一个带网格分割器的网格(2行),分割器位于第二行。

我想将第二行高度绑定到一个成员,因此我可以通过单击按钮来控制视图: 在开始时,视图仅显示第一行,当按钮单击时,视图显示两行,分割器位于中间,然后另一次单击第二行,分割器随着状态处于开始状态而下降。

我做到了,但只有在不使用分割器的情况下才有效。 使用分割器后,绑定停止。

有什么问题?

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排吧?我认为拆分器在中间行