【发布时间】:2014-03-14 22:32:04
【问题描述】:
所以我有这个带有一堆列定义的网格。初始列宽属性是从应用程序的设置中初始化的,它可以正常工作,然后我尝试为列设置一个最大大小,以便用户无法调整屏幕大小,从而使内容无法正确显示。
用于计算最大宽度的多重绑定似乎工作正常。但是,我遇到的问题是,当 gridsplitter 更改实际宽度的值时,多重绑定不会重新计算 MaxWidth 的值。我在转换器内部设置了一个断点,但没有命中。
但是,我不明白这是怎么回事,因为根据 GridSplitter 的文档:
http://msdn.microsoft.com/en-us/library/system.windows.controls.gridsplitter%28v=vs.110%29.aspx
使用 gridsplitter 调整大小应该会改变 columndefinition 的实际宽度。
如果是这种情况,那么我希望多重绑定能够更新。但是,我没有看到这个。
<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>
【问题讨论】:
-
第一次加载视图时是否在转换器中打断点?
-
是的,它是第一次计算,只是当实际宽度发生变化时它不会重新计算
标签: c# wpf xaml gridsplitter