当我写这篇文章时,我找到了一个解决方案,我将在下面解释,但为了一个学术练习,我想知道为什么我原来的解决方案不起作用。
我试图设置一个3列<Grid>,其中左列和右列将自动大小到它们的内容,但两者都有相同的宽度,因此较小的列将展开以匹配较大的列。这就是我试过的,看起来应该管用的:
<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绑定,而只是独立地对自己的内容进行自动调整。
就这样,这就是我最后要做的事:
<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>发布于 2018-03-27 13:07:49
第一个解决方案是通过初始化(一次)来完成的。
宽度稍后将不会更新(如果您在TextBlocks中更改文本),因为ActualWidth of ColumnDefinition既不通知DependencyProperty也不通知更改(您可以在代码后面更新绑定,但这个解决方案很难看)。
因此,如果绑定到ActualWidth of TextBlock,则将调整宽度:
<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要小,因此新宽度只能增长。
发布于 2018-03-27 12:25:49
你的第一种方法很好。像这样测试和工作:
<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。
https://stackoverflow.com/questions/49512249
复制相似问题