[英]WPF grid sizing Auto vs Star
在我的XAML中,我有一定的水平空間。 在其中我需要放一個文本(長度未知),然后是一個按鈕。 按鈕應直接放在文本后面。 我正在使用以下XAML:
<Border Name="Boundaries" MaxWidth="500" MinWidth="500" Height="20">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" TextTrimming="CharacterEllipsis">
Lorem ipsum dolor sit amet, pri ex option legendos. Ludus solet at mel, facilisis urbanitas nam ad.
</TextBlock>
<Button Grid.Column="1">Button</Button>
</Grid>
</Border>
當TextBlock中的文本很短時,一切正常,但是當文本足夠長時,TextBlock將溢出父元素,按鈕將不可見。 為了解決這個問題,我可以將第一列定義的寬度設置為*,但這意味着按鈕總是在右邊(即使文本是單個單詞,但我希望它在文本之后)。
在過去,我通過從父級的ActualSize設置轉換器的第一列定義的MaxWidth來修復類似的問題,但是這非常復雜且非常不可靠。
似乎這樣的基本布局要求將成為WPF的一部分,但我找不到任何東西。 我錯過了什么嗎?
您可以使用DockPanel
來實現此目的。 就像是:
<Border Name="Boundaries" MaxWidth="500" MinWidth="500" Height="20">
<DockPanel HorizontalAlignment="Left" LastChildFill="False">
<Button DockPanel.Dock="Right">Button</Button>
<TextBlock DockPanel.Dock="Right" TextTrimming="CharacterEllipsis">
Lorem ipsum dolor sit amet, pri ex option legendos. Ludus solet at mel, facilisis urbanitas nam ad.
</TextBlock>
</DockPanel>
</Border>
要在不強制執行預定大小的情況下執行此操作,您需要使用列來獲取布局大小,但不要將列用於實際布局。 添加兩列,然后在第一列中放置一個邊框,您可以使用該邊框來獲取TextBlock的大小。 在這個例子中,我將第二列的寬度綁定到按鈕的寬度,這樣,如果更改按鈕文本,它仍然可以工作。
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="{Binding ElementName=mybutton, Path=ActualWidth}" />
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Name="myborder"/>
<StackPanel Orientation="Horizontal" Grid.ColumnSpan="2">
<TextBlock MaxWidth="{Binding ElementName=myborder, Path=ActualWidth}" Text="test text" TextTrimming="CharacterEllipsis"/>
<Button Name="mybutton" Content="button" />
</StackPanel>
</Grid>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.