WPF ColumnDefinition自动宽度MinWidth绑定

时间:2018-03-27 11:56:47

标签: .net wpf binding

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

我试图设置一个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>

2 个答案:

答案 0 :(得分:1)

您的第一个解决方案通过初始化(一次)确实有效。

稍后不会更新宽度(如果更改TextBlocks中的Text),因为ActualWidth ColumnDefinition既没有DependencyProperty也没有通知有关更改(您可以更新代码中的绑定,但此解决方案是丑陋)。

因此,如果您绑定到ActualWidth的{​​{1}},则会调整宽度:

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,则您的旁边列不会缩小,因为新的宽度只会增加。

答案 1 :(得分:0)

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:columnCount="2"
        android:rowCount="2"
        android:alignmentMode="alignMargins"
        android:columnOrderPreserved="false"
        android:layout_margin="16dp">

        <android.support.v7.widget.CardView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_columnWeight="1"
            android:layout_rowWeight="1"
            android:layout_margin="16dp"/>

        <android.support.v7.widget.CardView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_columnWeight="1"
            android:layout_rowWeight="1"
            android:layout_margin="16dp"/>

        <android.support.v7.widget.CardView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_columnWeight="1"
            android:layout_margin="16dp"
            android:layout_rowWeight="1" />

        <android.support.v7.widget.CardView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_columnWeight="1"
            android:layout_rowWeight="1"
            android:layout_margin="16dp"/>


    </GridLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.5"/>
</LinearLayout>

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