簡體   English   中英

WPF TextBlock.TextTrimming不使用自動調整大小的ColumnDefinition

[英]WPF TextBlock.TextTrimming Not Working With Auto-sized ColumnDefinition

我正在使用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(有時......),但在運行應用程序時卻沒有。 運行時,所有標簽完全消失。 我通過監視窗口看到所有TextBlocks的實際寬度為0,而LabelColumn.ActualWidth等於80。

還有哪些其他選擇?

你需要有MinWidthMaxWidth上TextBlock的設置,如設置MinWidthMaxWidth上欄定義並不總是渲染榮幸。 在綁定表達式中使用ActualWidth可能會有問題,因為在多個渲染過程中設置了ActualWidth並且可能會產生不可預測的結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM