[英]How to prevent a TextBlock with TextTrimming CharacterEllipsis to extend Column with Width Auto
我有以下 XAML
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="Hello World" />
<TextBlock Grid.Row="1" Grid.Column="0" Text="Hello ABC DEF World" TextTrimming="CharacterEllipsis" />
</Grid>
</Window>
這導致以下用戶界面:
我希望 TextBlock“Hello ABC DEF World”修剪而不是擴展列寬。
要得到這個結果:
編輯:
想指出
Grid
它可以是任何內容控件( StackPanel
, DockPanl
, Canvas
等等)TextBlock
它可以是任何控件( Run
, Label
等等)如果我想要的是通過不同的控件組合實現的,我非常願意嘗試一下。
我想要的非代碼術語:
我知道我可以通過以下 XAML 實現這個目標:
<TextBlock ...
x:Name="MainInfo" />
<TextBlock ...
MaxWidth="{Binding Mode=OneWay, Path=ActualWidth, ElementName=MainInfo}" />
但如果可能的話,我想避免在ActualWidth
上Binding
。
我希望HorizontalAlignment = Left;
會阻止TextBlock
拉伸的願望,但事實並非如此。
但如果可能的話,我不想在 ActualWidth 上使用 Binding。
那么,您需要以某種方式定義寬度約束。 Auto
實際上意味着該列將隨着其中最寬的元素一起增長,即本例中的“次要”信息TextBlock
。
因此,您應該將列的Width
設置為MainInfo
的ActualWidth
,例如使用綁定。 或者以編程方式。 無論哪種方式,您都必須以一種或另一種方式設置它。
您可以通過多種方式實現這一目標。
取決於確切的預期目的。
一個值得注意且簡單的例子是使用一些技巧
您可以將主文本塊和一個矩形放在水平對齊的堆棧面板中,行跨度為 2,並且 Z 索引高於輔助文本塊。 您將矩形設置為高度等於兩個文本塊的總和,寬度必須由您根據所需規格設置。 這兩個文本塊必須設置固定高度,並且在帶有矩形的堆棧面板內的文本塊必須與堆棧面板內的頂部垂直對齊。 如果實施正確,結果應該是一個矩形,它覆蓋了使輔助文本塊大於主文本塊的輔助文本塊的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.