Ign*_*cia 3 .net c# wpf xaml grid-layout
我有一个非常简单的窗口,其中一个Grid包含两列,一个TextBlock和一个TextBox.

我需要它将列0设置为自动调整其内容大小,并使列1(内容)为列0大小的4倍.
我怎样才能做到这一点.如果这是解决方案,我将创建一个Grid后代,因为我真的需要这个功能.
编辑:更多解释.第0列的内容在运行时不会更改,因此第0列或第1列的大小在运行时不得更改.网格将是配置的窗口的子节点,SizeToContent="WidthAndHeight"因此不存在额外的空间.
对德米特里的回答:我用下面的代码尝试了你说的话,它根本不起作用:
<Window x:Class="UnderstandSizing.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1"
SizeToContent="WidthAndHeight" >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".25*" />
<ColumnDefinition Width=".75*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Text="THIS IS THE LABEL:" />
<TextBox Grid.Column="1" Text="content" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
最后编辑:为什么我(或任何人)需要这个?
WPF的一个好处是它无法在没有固定尺寸的情况下工作吗?如果你有缺陷并且你有更大的字体大小,一切都会好看.如果您将UI翻译成另一种需要x2大小的语言,一切都会好起来的.如果您有不同的PPI设置,一切都会好看.
但是我不希望看到的是屏幕在运行时改变它的大小,因为用户不习惯这个.这就是为什么我想将输入字段的大小设置为知道字段的倍数.如果我让标签单元格重新调整到需要的大小,然后我将内容单元格设置为标签的乘数,我将获得自动调整的好处,以及用户期望具有固定大小屏幕的行为(除非他们更改大小调整大小)它).
您可以在网格列上使用绑定:
<Grid.ColumnDefinitions>
<ColmunDefinition Width="Auto" x:Name="firstCol"/>
<ColumnDefinition Width="{Binding ActualWidth, ElementName=firstCol, Converter={StaticResource MultiplyConverter}, ConverterParameter=4}" />
</Grid.ColumnDefinitions>
Run Code Online (Sandbox Code Playgroud)
那么转换器:
public class MultiplyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double originalValue;
double multiplier;
if (value != null && parameter != null &&
double.TryParse(value.ToString(), out originalValue) &&
double.TryParse(parameter.ToString(), out multiplier)) //Can be lots of things: sentinel object, NaN (not a number)...
{
return originalValue * multiplier;
}
else return Binding.DoNothing;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
您也可以为网格列编写附加属性.