【问题标题】:Get column width if it is set to "2*" to Binding in xaml WPF?如果将列宽设置为“2 *”以在 xaml WPF 中绑定?
【发布时间】:2019-03-20 13:18:26
【问题描述】:

我在网格“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,它首先发送到转换器 zero,然后这是实际宽度

【问题讨论】:

  • 您在调试输出窗口中是否收到任何错误提示 Cannot find source for binding ...
  • 不,它发送到转换器“0”

标签: wpf xaml grid wpf-animation actualwidth


【解决方案1】:

不幸的是,ColumnDefinition.ActualWidth 不是依赖属性,这意味着它不会报告更新。一个快速的解决方案是编写一个继承自 ColumnDefinition 的新类,并在每次父 Grid 更新其布局时更改通知 ActualWidth。而不是ColumnDefinition,在xaml中使用这个类。

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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-07
    • 2019-06-05
    • 2017-12-03
    • 1970-01-01
    • 2013-02-19
    • 2019-01-27
    • 1970-01-01
    相关资源
    最近更新 更多