wpf - 如果将列宽设置为“2 *”以在 xaml WPF 中绑定?
问题描述
我在网格“MainGrid”的第三列中有 StackPanel。它的(第三列)宽度设置为“2*”。
我想使用边距隐藏 StackPanel,然后使用幻灯片动画来显示它。
所以我需要将StackPanel 的Margin设置为 Column[2] Width,但我怎样才能得到它?我正在尝试这个:
Margin="{Binding ElementName=MainGrid, Path=ColumnDefinitions[2].ActualWidth, Converter={StaticResource marginConverter}}
所以,我在代码隐藏中向转换器添加断点,它总是得到 0。
我尝试使用MainGrid .ActualWidth insted of Column[2] ActualWidth ,它首先发送到转换器零,然后是实际宽度。
解决方案
不幸的是,ColumnDefinition.ActualWidth
它不是依赖属性,这意味着它不会报告更新。一个快速的解决方案是编写一个继承自的新类,并在每次父级更新其布局时更改ColumnDefinition
通知。而不是,在 xaml 中使用这个类。ActualWidth
Grid
ColumnDefinition
public class MyColumnDefinition : ColumnDefinition, INotifyPropertyChanged
{
public MyColumnDefinition() : base() { }
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
((Grid)Parent).LayoutUpdated += MyColumnDefinition_LayoutUpdated;
}
private void MyColumnDefinition_LayoutUpdated(object sender, EventArgs e)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ActualWidth"));
}
public event PropertyChangedEventHandler PropertyChanged;
}
推荐阅读
- python - 如何按降序对数据表框架进行排序
- javascript - 错误:反应本机应用程序内的 html 文本内的 Youtube 链接
- java - 如何使用 Java 找到 2 个像素图像之间的相似性
- constraints - 系统verilog中约束中的多个foreach语句使用
- google-analytics - 使用 Google 跟踪代码管理器将站点速度采样率提高到 100,但对于有访问者的页面仍然显示为空
- java - 如何更改 ResourceServerConfiguration 顺序
- excel - 在excel vba中将数据转换为数据值代码
- angular - 如何在 Angular 中关闭 ZoneAwareError?
- javascript - 当我从 Xcode 运行时,React Native 项目无法加载
- ruby-on-rails - 如何根据特定日期范围对记录进行分组?