获取Topmost属性更改时的信息

本文关键字:信息 Topmost 属性 获取 | 更新日期: 2023-09-27 18:09:33

我有一个类,从窗口派生,我想在Topmost属性更改时收到通知。

我试图重写setter,但它没有被标记为virtual。更改与此属性连接的元数据会使其无法工作(将topmost设置为true后不会发生任何事情)。此外,WPF不提供与此属性连接的事件。我正在考虑重写Topmost属性,但我将其用于数据绑定,因此它必须保持DependencyProperty。

有没有办法得到那个通知?

获取Topmost属性更改时的信息

我试了一下,它似乎对我很好。

public partial class MainWindow : Window
{
    static MainWindow()
    {
        Window.TopmostProperty.OverrideMetadata(typeof(MainWindow),
            new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.None,
                new PropertyChangedCallback(OnTopMostChanged)));
    }
    public event EventHandler TopmostChanged;
    private static void OnTopMostChanged(DependencyObject d,
        DependencyPropertyChangedEventArgs e)
    {
        MainWindow mv = (MainWindow)d;
        if (mv.TopmostChanged != null)
            mv.TopmostChanged(mv, EventArgs.Empty);
    }
    private void ChangeTopmostBtn_Click(object sender, RoutedEventArgs e)
    {
        this.Topmost = !this.Topmost;
    }
    ...
}

当我点击我的ChangeTopmost按钮,我得到在OnTopMostChanged方法。因此,如果您做同样的事情,并让任何人注册到TopmostChanged事件,它将获得事件

您可以创建自己的MyTopmostDependencyPropertyPropertyChangedCallback,在那里您可以引发您的通知事件并将其绑定到原始TopmostDependencyProperty

public static readonly DependencyProperty MyTopmostProperty =
  DependencyProperty.Register("MyTopmost",
    typeof(bool),
    typeof(MyWindow),
    new FrameworkPropertyMetadata {
      PropertyChangedCallback = new PropertyChangedCallback(OnMyTopmostChanged)
    }
);

尝试实现NotifyPropertyChanged接口。您可以在MSDN上阅读有关此接口的更多信息。(如何:实现属性更改通知)