.net WPF ColumnDefinition自动宽度最小宽度绑定
当我写这篇文章的时候,我找到了一个解决方案,我将在下面解释,但是为了一个学术练习,我想知道为什么我原来的解决方案不起作用 我试图设置一个3列.net WPF ColumnDefinition自动宽度最小宽度绑定,.net,wpf,binding,.net,Wpf,Binding,当我写这篇文章的时候,我找到了一个解决方案,我将在下面解释,但是为了一个学术练习,我想知道为什么我原来的解决方案不起作用 我试图设置一个3列,其中左侧和右侧的列将根据其内容自动调整大小,但都具有相同的宽度,因此较小的列将展开以匹配较大的列。这就是我尝试过的,似乎应该奏效: <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Name="FlagCo
,其中左侧和右侧的列将根据其内容自动调整大小,但都具有相同的宽度,因此较小的列将展开以匹配较大的列。这就是我尝试过的,似乎应该奏效:
<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>
您的第一种方法运行良好。像这样测试和工作:
<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对于中间列您的第一个解决方案通过初始化(一次)来工作 宽度稍后将不会更新(如果您更改文本块中的文本),因为
ColumnDefinition
的ActualWidth
既不依赖属性也不通知更改(您可以在代码隐藏中更新绑定,但此解决方案很难看)
因此,如果您绑定到文本块
的实际宽度
,那么您的宽度将被调整:
<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
-大小小于MinWidth
,因此新的宽度只能增加。第一个解决方案也适用于我。。啊,谢谢,我没有意识到它不是依赖性属性。愚蠢的我。在我的情况下,它不起作用,因为加载时列的宽度为0,并且在某些绑定得到解析时更新,因此更新的实际宽度从未被看到。另一个答案得到了它-因为ColumnDefinition。实际宽度
不是依赖属性,它在绑定值更改时没有更新绑定。