簡體   English   中英

WPF網格大小調整Auto vs Star

[英]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.

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