2010-11-22 104 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,並且可能產生不可預知的結果