当我写这篇文章时,我找到了一个解决方案,我将在下面解释,但为了学术练习,我想知道为什么我的原始解决方案不起作用。
我试图设置一个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>
答案 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