Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WPF ColumnDefinition自动宽度最小宽度绑定_.net_Wpf_Binding - Fatal编程技术网

.net WPF ColumnDefinition自动宽度最小宽度绑定

.net WPF ColumnDefinition自动宽度最小宽度绑定,.net,wpf,binding,.net,Wpf,Binding,当我写这篇文章的时候,我找到了一个解决方案,我将在下面解释,但是为了一个学术练习,我想知道为什么我原来的解决方案不起作用 我试图设置一个3列,其中左侧和右侧的列将根据其内容自动调整大小,但都具有相同的宽度,因此较小的列将展开以匹配较大的列。这就是我尝试过的,似乎应该奏效: <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Name="FlagCo

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

我试图设置一个3列
,其中左侧和右侧的列将根据其内容自动调整大小,但都具有相同的宽度,因此较小的列将展开以匹配较大的列。这就是我尝试过的,似乎应该奏效:

        <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。实际宽度
不是依赖属性,它在绑定值更改时没有更新绑定。