我有一个WPF应用程序,在主窗口中有2个网格列。调整大小时,我希望右边的列永远不会低于220宽度,但是左边的列会继续缩小。如果窗口足够扩展,我希望两列都按比例扩展,左列的大小是右列的两倍。我以为可以通过以下XAML来实现这一目标...
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="1*" MinWidth="220"/>
</Grid.ColumnDefinitions>
但是发生的是,当右列达到220时,它们都停止调整大小,并且窗口仅在右列上关闭(开始覆盖控件),如下图所示。我现在知道为什么要这样做了,但是我不知道如何使它按我希望的方式发挥作用。
答案 0 :(得分:0)
应用一个DataTrigger
,如果第2列的ActualWidth
等于第2列的MinWidth
,则将Width
更改为auto
到列的ColumnDifinition
1应该实现您的目标。
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*">
<ColumnDefinition.Style>
<Style TargetType="ColumnDefinition">
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource eqCvrt}">
<Binding ElementName="c2" Path="ActualWidth"/>
<Binding ElementName="c2" Path="MinWidth"/>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Width" Value="auto"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
<ColumnDefinition Width="1*" MinWidth="220" Name="c2"/>
</Grid.ColumnDefinitions>
public class EqualityConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return Object.Equals(values[0], values[1]);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
return null;
}
}