我有一個派生自Window的類,我想在頂層屬性發生變化時收到通知。如果最頂層屬性發生變化,獲取信息
我試圖覆蓋setter,但它沒有標記爲虛擬。更改與此屬性連接的元數據使其無法工作(設置最高真實值後沒有任何反應)。此外,WPF不提供與此屬性相關的事件。我在考慮重寫Topmost屬性,但是我使用它來進行數據綁定,所以它必須保留DependencyProperty。
有什麼方法可以獲得該通知嗎?
我有一個派生自Window的類,我想在頂層屬性發生變化時收到通知。如果最頂層屬性發生變化,獲取信息
我試圖覆蓋setter,但它沒有標記爲虛擬。更改與此屬性連接的元數據使其無法工作(設置最高真實值後沒有任何反應)。此外,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上閱讀有關此接口的更多信息。 (如何:實施財產變更通知)
如果您發現任何有用的答案,請選擇它作爲您的問題的答案。 – raym0nd