WPF如何在GridSplitter列调整大小时使网格重新评估最大宽度?

时间:2014-03-14 22:32:04

标签: c# wpf xaml gridsplitter

所以我的网格有一堆列定义。初始列宽属性是从应用程序的设置初始化,它正常工作,然后我尝试为列创建一个最大大小,以便用户无法调整屏幕大小,以便事情不会正确显示。

用于计算最大宽度的多重绑定似乎正常工作。但是,我遇到的问题是,当gridsplitter更改实际宽度的值时,multibinding不会重新计算MaxWidth的值。我在转换器内部设置了一个断点,但它没有被击中。

但是,我不知道那是怎么回事,因为根据GridSplitter的文档:

http://msdn.microsoft.com/en-us/library/system.windows.controls.gridsplitter%28v=vs.110%29.aspx

使用gridsplitter调整大小应该会改变columndefinition的实际宽度。

如果是这种情况,那么我希望multibinding能够更新。但是,我没有看到这一点。

  <Grid.ColumnDefinitions>
  <ColumnDefinition 
      x:Name="NameListViewColumn"
      MinWidth="100"
      Width="{Binding NameListViewWidth, Source={x:Static DaedalusGraphViewer:SettingsManager.AppSettings}, Mode=OneTime,
                      Converter={StaticResource GridLengthConverter}}"              
      >
    <ColumnDefinition.MaxWidth>
      <MultiBinding Converter="{StaticResource SignalNameColumnMaxSizeConverter}">
        <Binding Path="ActualWidth" 
                 ElementName="NameListViewColumn"
                 />
        <Binding Path="ActualWidth" 
                 ElementName="SignalValuesListViewColumn"
                 />
       <Binding Path="ActualWidth" 
                ElementName="SignalTreeViewColumn"
                />

        <Binding ElementName="SignalValuesListViewColumn" Path="MinWidth" />
        <Binding ElementName="SignalTreeViewColumn" Path="MinWidth" />

      </MultiBinding>
    </ColumnDefinition.MaxWidth>

  </ColumnDefinition>
    <ColumnDefinition Width="Auto" x:Name="SignalNamesGridSpitter"/>
  <ColumnDefinition 
      MinWidth="100"
      x:Name="SignalValuesListViewColumn"
      Width="{Binding SignalValuesListViewWidth, Source={x:Static DaedalusGraphViewer:SettingsManager.AppSettings}, 
                      Mode=OneTime, Converter={StaticResource GridLengthConverter}}"
      >
    <ColumnDefinition.MaxWidth>
      <MultiBinding Converter="{StaticResource SignalValuesMaxSizeConverter}">
        <Binding Path="ActualWidth" 
                 ElementName="SignalValuesListViewColumn"
                 />
        <Binding Path="ActualWidth" 
                 ElementName="SignalTreeViewColumn"
                 />


        <Binding ElementName="SignalTreeViewColumn" Path="MinWidth" />

      </MultiBinding>
    </ColumnDefinition.MaxWidth>
  </ColumnDefinition>
    <ColumnDefinition x:Name="SignalValuesGridSplitter" Width="Auto"/>
    <ColumnDefinition 
      x:Name="SignalTreeViewColumn"
      MinWidth="100"
      Width="*"
      />
    <ColumnDefinition Width="18" MinWidth="18" x:Name="VerticalScrollBarColumn"/>
  </Grid.ColumnDefinitions>

2 个答案:

答案 0 :(得分:1)

在这里找到答案:基本上实际的宽度属性并没有实现INotifyPropertyChanged。

Binding to ColumnDefinition.ActualWidth returns 0

答案 1 :(得分:0)

  

MaxWidth =&#34; {Binding ElementName = SignalValuesGridSplitter,Path = ActualWidth}&#34; TextWrapping =&#34;包覆与#34; /&GT;

希望有所帮助