我有一个包含某些列设置的网格:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".25*" MinWidth="200"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="240" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="100*" />
</Grid.RowDefinitions>
....Omitting content to keep this simple....
</grid>
当我调整包含控件的宽度时,中间列按预期调整大小到一个点。然后它将开始剪辑第三列,没有明显的原因(中心列仍有空间缩小)。如何强制WPF仅调整中心列的大小,如果中心列的宽度为0,则仅剪切第三列?
答案 0 :(得分:1)
编辑:
尝试使用MultiValueConverter
将第二列的MaxWidth
最小化到网格中的可用空间。下面的代码可以解决这个问题:
<强>的Xaml:强>
<Grid.ColumnDefinitions>
<ColumnDefinition Name="col1" Width=".25*" MinWidth="200"/>
<ColumnDefinition Name="col2" Width="*">
<ColumnDefinition.MaxWidth>
<MultiBinding Converter="{StaticResource GridWidthConverter}">
<Binding ElementName="col1" Path="MinWidth"/>
<Binding ElementName="col3" Path="Width"/>
<Binding ElementName="Control" Path="ActualWidth"/>
</MultiBinding>
</ColumnDefinition.MaxWidth>
</ColumnDefinition>
<ColumnDefinition Name="col3" Width="240" />
</Grid.ColumnDefinitions>
<强>转换器:强>
public class GridWidthConverter : IMultiValueConverter
{
#region IMultiValueConverter Members
public object Convert(object[] values, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var col1 = System.Convert.ToDouble(values[0]);
var col2 = System.Convert.ToDouble(((GridLength)values[1]).Value);
var control = System.Convert.ToDouble(values[2]);
var maxWidth = control - (col1 + col2);
return maxWidth > 0 ? maxWidth : 0;
}
public object[] ConvertBack(object value, System.Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
#endregion
}
您可能希望向转换器添加一些错误检查,但它应该为您提供想法。
答案 1 :(得分:0)
我最终搞清楚了问题。理查德·E带领我走向正确的方向。显然,在列和最小宽度上设置*表示法的行为导致了我遇到的行为。具体地说,当第1列由于达到最小宽度而停止收缩时,第2列仅继续以第1列继续收缩时所具有的速率收缩。此版本的xaml正常工作:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="240" />
</Grid.ColumnDefinitions>
我不知道我遇到的行为是否有意。
感谢您的帮助!