我有一个派生自 Window 的类,我希望在更改 Topmost 属性时收到通知。
我试图覆盖 setter,但它没有标记为虚拟。更改与此属性相关的元数据使其无法正常工作(设置 topmost true 后没有任何反应)。WPF 也不提供与此属性相关的事件。我正在考虑覆盖 Topmost 属性,但我将它用于数据绑定,所以它必须保持 DependencyProperty。
有什么办法可以得到那个通知吗?
我试试这个,它似乎对我来说很好用。
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 事件,它将获得该事件。
您可以创建自己MyTopmostDependencyProperty
的PropertyChangedCallback
,您可以在其中引发通知事件并将其绑定到原始TopmostDependencyProperty
.
public static readonly DependencyProperty MyTopmostProperty =
DependencyProperty.Register("MyTopmost",
typeof(bool),
typeof(MyWindow),
new FrameworkPropertyMetadata {
PropertyChangedCallback = new PropertyChangedCallback(OnMyTopmostChanged)
}
);
尝试实现 NotifyPropertyChanged 接口。您可以在MSDN上阅读有关此接口的更多信息。(如何:实现属性更改通知)