2010-11-22 106 views
8

我正在使用WPF网格作为我的窗口的布局。它有两列和任意数量的行。第一列专门用于标签,第二列用于用户输入字段(例如TextBox,ComboBox等)。我的要求是:WPF TextBlock.TextTrimming不能与自动调整大小的列定义

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

还有其他选项吗?

回答

7

你需要对TextBlock中MinWidthMaxWidth集,作为列定义设置MinWidthMaxWidth不渲染总是荣幸。 在绑定表达式中使用ActualWidth可能会产生问题,因为在多次渲染过程中设置了ActualWidth,并且可能产生不可预知的结果