我在 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
当鼠标在按钮上时,我看到按钮下方,当鼠标离开按钮时,它隐藏起来。
但是当我单击按钮时出现异常
WindowsBase.dll 中出现“System.StackOverflowException”类型的未处理异常
问题是 -为什么鼠标点击会触发这个异常?我没有在 Click 事件上运行任何我的代码,但不点击就不会发生异常......
顺便说一句:如果我用例如替换按钮也会发生同样的Image
情况,所以它似乎不是由特定控件引起的......