【问题标题】:WPF Binding a control's zindex to a property doesn't workWPF将控件的zindex绑定到属性不起作用
【发布时间】:2016-04-28 11:17:16
【问题描述】:

如果我将控件的 ZIndex 绑定到属性,尽管在调试时明确调用了该属性(断点在 getter 上命中),但 zindex 似乎不起作用(即 zindex 在正确运行的应用程序;如果我将 zindex 设置为绑定到属性而不是 XAML 中的设置值,则控件上的元素不再可单击)。 知道为什么,或者如何解决这个问题吗?感谢您的帮助!

        <views:LaunchableApplicationControl BorderThickness="0" 
            BorderBrush="DarkSlateGray" x:Name="LaunchableApplicationControl"
            Grid.Column="1" Margin="25,150,25,50"  
            Panel.ZIndex="{Binding LaunchableControlZIndex}" 
            Grid.Row="0" Grid.RowSpan="2" 
            DataContext="{Binding LaunchableApplication, Mode=OneWay, 
            Source={StaticResource Locator}}"/>

【问题讨论】:

  • 显然该控件是 Grid 的子控件并放入第 1 列第 0-1 行。如果同一网格单元格中没有任何其他控件,则设置 ZIndex 无效,因为它相对于直接父级的其他子级,即 Grid。
  • 不,与此无关。 zIndex 确实有效果,但将它动态绑定到属性就没有效果。如果我在控件上调用 Canvas.SetZindex() ,那确实有效。
  • 主视图的属性。它确实会受到影响 - 如果我设置断点,它会在启动时停止获取属性,但 zIndex 的功能表现就像它的 -1 - 网格上没有任何可交互的东西。

标签: c# .net wpf xaml


【解决方案1】:

您可以尝试DataContext="{Binding ElementName=LaunchableApplicationControl}" 并绑定到将设置ZIndex 的属性。确保你实现了INotifyPropertyChangedinterface

        private int _Zindex;
        public int Zindex
        {
            get { return _Zindex; }
            set
            {
                if (_Zindex == value)
                {
                    return;
                }
                _Zindex = value;
                NotifyPropertyChanged("Zindex");
            }
        }

【讨论】:

  • 谢谢 - 这就是我所做的,它确实绑定了。 zIndex 被设置。但它的效果是错误的。该控件上的元素不再可点击,就好像它们的 zIndex 设置为 -1。通过 Canvas.GetZIndex((UserControl)this.FindName("LaunchableApplicationControl")); 设置它绝对有效,并具有预期的效果。我不知道为什么这与绑定到属性的行为不同。
猜你喜欢
  • 2012-04-03
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
相关资源
最近更新 更多