0

Windowから派生したクラスがあり、Topmostプロパティが変更されたときに通知を受け取りたいです。

セッターをオーバーライドしようとしましたが、仮想としてマークされていません。このプロパティに関連するメタデータを変更すると、機能しなくなりました(最上位をtrueに設定した後は何も起こりません)。また、WPFは、このプロパティに関連するイベントを提供しません。Topmostプロパティをオーバーライドすることを考えていましたが、データバインディングに使用するため、DependencyPropertyのままにする必要があります。

その通知を受け取る方法はありますか?

4

3 に答える 3

2

私はこれを試してみましたが、うまくいくようです。

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イベントに誰かを登録すると、イベントが取得されます。

于 2011-09-23T14:52:59.567 に答える
1

通知イベントを発生させて元のイベントにバインドできる場所を使用MyTopmostDependencyPropertyして、独自のイベントを作成できます。PropertyChangedCallbackTopmostDependencyProperty

public static readonly DependencyProperty MyTopmostProperty =
  DependencyProperty.Register("MyTopmost",
    typeof(bool),
    typeof(MyWindow),
    new FrameworkPropertyMetadata {
      PropertyChangedCallback = new PropertyChangedCallback(OnMyTopmostChanged)
    }
);
于 2011-09-23T14:41:21.133 に答える
1

NotifyPropertyChangedインターフェイスを実装してみてください。このインターフェイスの詳細については、MSDNを参照してください。(方法:プロパティ変更通知を実装する)

于 2011-09-23T14:42:55.207 に答える