WPF TextBlock.TEXTTRIMING无法使用自动调整大小的列定义

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"

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

  • 第一列的最小宽度必须为50,最大宽度必须为180
  • 第一列的大小必须与其内容相符,除非它违反了第一个要求
  • 第二列必须占用所有剩余空间
  • 我尝试了下面的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上工作(有时…),但在运行应用程序时没有。运行时,所有标签完全消失。我通过watch窗口看到,所有文本块的实际宽度都是0,而LabelColumn.ActualWidth等于80


    还有哪些其他选项?

    您需要在文本块上设置
    MinWidth
    MaxWidth
    ,因为在渲染时并不总是遵循列定义上的设置
    MinWidth
    MaxWidth
    。 在绑定表达式中使用
    ActualWidth
    可能会有问题,因为在多个渲染过程中设置了
    ActualWidth
    ,可能会产生不可预测的结果