WPF で奇妙な動作に遭遇しました。この問題を回避する方法はいくつかありますが、私はなぜそれが起こっているのかをよりよく理解しようとしています:
新しい WPF アプリケーションを作成し、ContextMenu
次のボタンを追加しました。
<Grid>
<Button x:Name="btnTest" Margin="10,10,10,10"
MouseEnter="BtnTest_OnMouseEnter" MouseLeave="BtnTest_OnMouseLeave">
<Button.ContextMenu>
<ContextMenu x:Name="myContext">
<TextBlock Text="Context Menu Text"></TextBlock>
</ContextMenu>
</Button.ContextMenu>
</Button>
</Grid>
コード ビハインドではMouseEnter
、ContextMenu のMouseLeave
表示と非表示に使用しています。
private void BtnTest_OnMouseEnter(object sender, MouseEventArgs e)
{
myContext.PlacementTarget = btnTest;
myContext.Placement = PlacementMode.Bottom;
myContext.IsOpen = true;
}
private void BtnTest_OnMouseLeave(object sender, MouseEventArgs e)
{
myContext.IsOpen = false;
}
これContextMenu
で、マウスがボタン上にあるときにボタンの下に表示され、マウスがボタンを離れると非表示になります。
しかし、ボタンをクリックすると例外が発生します
タイプ 'System.StackOverflowException' の未処理の例外が WindowsBase.dll で発生しました
質問は -具体的には、マウスクリックがこの例外をトリガーするのはなぜですか? Clickイベントで実行しているコードはありませんが、クリックしないと例外は発生しません...
ところで:ボタンをたとえばに置き換えても同じことが起こるImage
ので、特定のコントロールが原因ではないようです...