WPF TextBlock.TEXTTRIMING无法使用自动调整大小的列定义
我使用WPF网格作为窗口的布局。它有两列和任意数量的行。第一列专门用于标签,第二列用于用户输入字段(例如文本框、组合框等)。我的要求是:WPF TextBlock.TEXTTRIMING无法使用自动调整大小的列定义,wpf,xaml,binding,grid,textblock,Wpf,Xaml,Binding,Grid,Textblock,我使用WPF网格作为窗口的布局。它有两列和任意数量的行。第一列专门用于标签,第二列用于用户输入字段(例如文本框、组合框等)。我的要求是: 第一列的最小宽度必须为50,最大宽度必须为180 第一列的大小必须与其内容相符,除非它违反了第一个要求 第二列必须占用所有剩余空间 我尝试了下面的XAML: <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" MinWidth="50"
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="50" MaxWidth="180" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Text="First Name" TextTrimming="CharacterEllipsis" />
<TextBox Grid.Column="1" Text="{Binding FirstName}" />
<TextBlock Grid.Row="1" Text="Family Name" TextTrimming="CharacterEllipsis" />
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding FamilyName}" />
<TextBlock Grid.Row="2" Text="Label That Won't Fit in 180 units" TextTrimming="CharacterEllipsis" />
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Text}" />
</Grid>
我希望第三行标签“无法容纳180个单位的标签”将被截断为类似“无法容纳的标签…”。取而代之的是,它只是被剪到了“不会”的标签上,而“t”的一半缺失了
我在网上某处找到了一种不同的方法
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="LabelColumn" Width="Auto" MinWidth="50" MaxWidth="180" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Width="{Binding ActualWidth, ElementName=LabelColumn}" Text="First Name" TextTrimming="CharacterEllipsis" />
<TextBox Grid.Column="1" Text="{Binding FirstName}" />
<TextBlock Grid.Row="1" Width="{Binding ActualWidth, ElementName=LabelColumn}" Text="Family Name" TextTrimming="CharacterEllipsis" />
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding FamilyName}" />
<TextBlock Grid.Row="2" Width="{Binding ActualWidth, ElementName=LabelColumn}" Text="Label That Won't Fit in 180 units" TextTrimming="CharacterEllipsis" />
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Text}" />
</Grid>
它最终在Expression Blend上工作(有时…),但在运行应用程序时没有。运行时,所有标签完全消失。我通过watch窗口看到,所有文本块的实际宽度都是0,而LabelColumn.ActualWidth等于80
还有哪些其他选项?您需要在文本块上设置
MinWidth
和MaxWidth
,因为在渲染时并不总是遵循列定义上的设置MinWidth
和MaxWidth
。
在绑定表达式中使用ActualWidth
可能会有问题,因为在多个渲染过程中设置了ActualWidth
,可能会产生不可预测的结果