我有一个地址用户控件,我在所有数据输入表格中使用此控件
两栏
我想根据其使用的视图调整1列
例如
这是使用用户控件的视图之一
红色标记为查看网格列
黄色标记为用户控件网格列
有没有办法将黄色标记设置为等于红色标记的列宽?
或者是否可以创建Dependency属性并将宽度绑定到列,或任何其他智能方法来解决此问题?
XAML
<Grid x:Name="LayoutRoot">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="Full Name" Style="{StaticResource FormTextBlockStyle}" />
<TextBox Grid.Row="0" Grid.Column="1" Width="200" Text="" Style="{StaticResource FormTextBoxStyle}" IsEnabled="False" IsReadOnly="True" />
<TextBlock Grid.Row="1" Grid.Column="0" Text="Gender" Style="{StaticResource FormTextBlockStyle}" />
<StackPanel Grid.Row="1" Grid.Column="1" Orientation="Horizontal">
<RadioButton x:Name="RadioGendeMale" Content="Male" />
<RadioButton Content="Female" Margin="8,0,0,0" />
</StackPanel>
<TextBlock Grid.Row="2" Grid.Column="0" Text="Date of Birth" Style="{StaticResource FormTextBlockStyle}" />
<TextBox Grid.Row="2" Grid.Column="1" Width="200" Text="" Style="{StaticResource FormTextBoxStyle}" />
<Controls:AddressControl x:Name="grdAdddress" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" VerticalAlignment="Top"/>
</Grid>
答案 0 :(得分:1)
这里的主要问题是ColumnDefinition.ActualWidth
不是DependencyProperty
,如果你绑定它就不会更新。
我假设您不仅要将黄色设置为红色,还要同步到更大的宽度。如果您的情况是合理的静态(初始显示后第一列宽度没有变化),您可以使用它:
在UserControl中:
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="Col1" Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
UserControl后面的代码:
public AddressControl()
{
InitializeComponent();
this.Loaded += AddressControl_Loaded;
}
void AddressControl_Loaded(object sender, RoutedEventArgs e)
{
var parentGrid = this.Parent as Grid;
if (parentGrid != null)
{
var width = Math.Max(this.Col1.ActualWidth, parentGrid.ColumnDefinitions[0].ActualWidth);
this.Col1.Width = new GridLength(width);
parentGrid.ColumnDefinitions[0].Width = new GridLength(width);
}
}
对于更具动态性的情况,您必须处理SizeChanged
个事件。
答案 1 :(得分:0)
试图让依赖属性处于控制状态并绑定它并不像adabyron所说的那样起作用。他的解决方案似乎还可