首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ColumnDefinition自动宽度MinWidth装订

ColumnDefinition自动宽度MinWidth装订
EN

Stack Overflow用户
提问于 2018-03-27 11:56:46
回答 2查看 1.8K关注 0票数 2

当我写这篇文章时,我找到了一个解决方案,我将在下面解释,但为了一个学术练习,我想知道为什么我原来的解决方案不起作用。

我试图设置一个3列<Grid>,其中左列和右列将自动大小到它们的内容,但两者都有相同的宽度,因此较小的列将展开以匹配较大的列。这就是我试过的,看起来应该管用的:

代码语言:javascript
复制
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Name="FlagColumn" Width="Auto" MinWidth="{Binding ActualWidth, ElementName=NumberColumn}"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Name="NumberColumn" Width="Auto" MinWidth="{Binding ActualWidth, ElementName=FlagColumn}"/>
            </Grid.ColumnDefinitions>                

            <TextBlock Grid.Column="0" Text="AAAA" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBlock Grid.Column="1" Text="BBBBBBBBBBBBB" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBlock Grid.Column="2" Text="CCCCCCC" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Grid>

这导致列自动调整大小,但似乎忽略了MinWidth绑定,而只是独立地对自己的内容进行自动调整。

就这样,这就是我最后要做的事:

代码语言:javascript
复制
        <Grid Grid.IsSharedSizeScope="True">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" SharedSizeGroup="Corner"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto" SharedSizeGroup="Corner"/>
            </Grid.ColumnDefinitions>                

            <TextBlock Grid.Column="0" Text="AAAA" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBlock Grid.Column="1" Text="BBBBBBBBBBBBB" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <TextBlock Grid.Column="2" Text="CCCCCCC" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Grid>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-27 13:07:49

第一个解决方案是通过初始化(一次)来完成的。

宽度稍后将不会更新(如果您在TextBlocks中更改文本),因为ActualWidth of ColumnDefinition既不通知DependencyProperty也不通知更改(您可以在代码后面更新绑定,但这个解决方案很难看)。

因此,如果绑定到ActualWidth of TextBlock,则将调整宽度:

代码语言:javascript
复制
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Name="FlagColumn" Width="Auto" MinWidth="{Binding ActualWidth, ElementName=tb3}"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Name="NumberColumn" Width="Auto" MinWidth="{Binding ActualWidth, ElementName=tb1}"/>
    </Grid.ColumnDefinitions>

    <TextBlock x:Name="tb1"  Grid.Column="0" Text="AAAA" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    <TextBlock Grid.Column="1" Text="BBBBBBBBBBBBB" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    <TextBlock x:Name="tb3" Grid.Column="2" Text="CCCCCCC" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>

此外,如果列中的文本将缩短,则侧列不会缩小,尽管Auto-size比以前的值设置的MinWidth要小,因此新宽度只能增长。

票数 2
EN

Stack Overflow用户

发布于 2018-03-27 12:25:49

你的第一种方法很好。像这样测试和工作:

代码语言:javascript
复制
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Name="FlagColumn" Width="Auto" MinWidth="{Binding ActualWidth, ElementName=NumberColumn}"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Name="NumberColumn" Width="Auto" MinWidth="{Binding ActualWidth, ElementName=FlagColumn}"/>
    </Grid.ColumnDefinitions>

    <TextBlock Grid.Column="0" Text="AAAA" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    <TextBlock Grid.Column="1" Text="BBBBBBBBBBBBB" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    <TextBlock Grid.Column="2" Text="CCCCCCCCCCCCCCCCC" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>

第一和第三栏为126.31,中间列为531.38。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49512249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档