【问题标题】:WPF TextBlock.TextTrimming Not Working With Auto-sized ColumnDefinitionWPF TextBlock.TextTrimming 不适用于自动调整大小的 ColumnDefinition
【发布时间】:2011-05-13 16:53:00
【问题描述】:

我使用 WPF 网格作为窗口的布局。它有两列和任意数量的行。第一列专门用于标签,第二列用于用户输入字段(例如 TextBox、ComboBox 等)。我的要求是:

  1. 第一列的最小宽度必须为 50,最大宽度必须为 180。
  2. 第一列的大小必须与其内容相符,除非它违反了第一个要求。
  3. 第二列必须占据所有剩余空间。

我尝试了下面的 XAML:

<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 上工作(有时...),但在运行应用程序时却没有。运行时,所有标签完全消失。我通过监视窗口看到所有 TextBlock 的实际宽度为 0,而 LabelColumn.ActualWidth 等于 80。

还有哪些其他选择?

【问题讨论】:

    标签: wpf xaml binding grid textblock


    【解决方案1】:

    您需要在 TextBlock 上设置 MinWidthMaxWidth,因为在列定义上设置 MinWidthMaxWidth 并不总是在呈现时得到尊重。 在绑定表达式中使用ActualWidth 可能会出现问题,因为ActualWidth 是在多次渲染过程中设置的,并且可能会产生不可预测的结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-20
      • 2019-08-20
      • 2011-01-09
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      相关资源
      最近更新 更多