wpf - 如何使 2 列按比例调整大小超过某个宽度,但当表单低于该宽度时只有一个调整大小?
问题描述
我有一个 WPF 应用程序,主窗口中有 2 个网格列。调整大小时,我希望右列永远不会低于 220 宽度,但左列继续缩小。如果窗口足够扩大,我希望两列按比例扩大,左列的大小是右列的两倍。我想我可以用下面的 XAML 来做到这一点......
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="1*" MinWidth="220"/>
</Grid.ColumnDefinitions>
但是发生的情况是,当右列达到 220 时,它们都停止调整大小并且窗口仅在右列上方关闭(开始覆盖控件),如下图所示。我现在明白它为什么这样做了,但我不知道如何让它按照我想要的方式运行。
解决方案
应用DataTrigger
如果ActualWidth
第 2 列等于MinWidth
第 2 列然后更改为Width
第1 列应该可以实现您的目标。auto
ColumnDifinition
<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;
}
}
推荐阅读
- sql - 基于 MSSQL 或 LINQ 中的单列选择不常见的行
- javascript - 如何在 React 中绘制堆叠的时间序列?
- atomic - OpenACC:ATOMIC 指令的问题
- php - AWS Elastic Beanstalk + Laravel, Nginx Configuration
- ansible - Ansible lint 报告“软件包安装不应使用最新的”
- python - 使用 python-docx 插入图像后 Word 文档的表格单元格中的空行
- string - 在结构字段中查找字符串的索引
- python-3.x - 使用 cerberus 正则表达式验证字符串以模式结尾
- ruby-on-rails - 如何干燥 Rails 6 部分形式
- r - Plotly (R) 使小数成为条形图中最大的条形