0

から派生したクラスにこのコードがありますUserControl(ウィンドウから派生した場合と同じ動作)。コードは非常に単純なサンプル (問題を分離する) であり、マウスを使ってマウス ダウンとマウス アップの間だけでいくつかの行を移動したい (これらの行を直接参照することはできません) 唯一の方法は、それらを削除し、正しい位置に再度追加します。

protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
    m_Grid.Children.Clear( );
    m_Grid.Children.Add(new Button());
    base.OnMouseLeftButtonDown(e);
}

protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
    m_Grid.Children.Clear();
    base.OnMouseLeftButtonUp(e);
}

Wherem_Gridは次のように宣言されています。

private readonly Grid m_Grid;

この形式でOnMouseLeftButtonUpは、呼び出されることはありません。私が削除した場合:

m_Grid.Children.Clear( );
m_Grid.Children.Add(new Button());

OnMouseLeftButtonUp呼ばれます。

なぜなのかご存知ですか?

4

1 に答える 1

1

ここでWindowの またはUserControlmouseUp イベントを次のように設定しました。MouseUp を実行する瞬間、カーソルはまたは グリッド上ではなくWindowまたはUserControlの表面上にあるButton必要があるため、MouseUp イベントを発生させることができます。

この問題を解決するには、次を追加します。

protected override void OnPreviewMouseLeftButtonUp(MouseButtonEventArgs e)
        {
            m_Grid.Children.Clear();
            base.OnPreviewMouseLeftButtonUp(e);
        }
于 2012-10-03T07:31:50.157 に答える