gpt4 book ai didi

c# - 尝试显示 ContextMenu 并单击其父项时发生 StackOverflowException

转载 作者:行者123 更新时间:2023-11-30 18:46:56 25 4
gpt4 key购买 nike

我在 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,当鼠标离开按钮时它隐藏了。

但是当我点击按钮时出现异常

An unhandled exception of type 'System.StackOverflowException' occurred in WindowsBase.dll

问题是 - 为什么鼠标点击,特别是触发这个异常?我没有在 Click 事件上运行我的任何代码,但没有单击不会发生异常...

顺便说一句:例如,如果我用 Image 替换 Button 也会发生同样的情况,所以它似乎不是由特定控件引起的...

最佳答案

像这样更改您的 XAML:

   <Grid>
<Popup x:Name="myContext">
<TextBlock Text="Context Menu Text"></TextBlock>
</Popup>

<Button x:Name="btnTest" Margin="10,10,10,10"
MouseEnter="BtnTest_OnMouseEnter" MouseLeave="BtnTest_OnMouseLeave">
</Button>
</Grid>

我认为您的代码中存在此类循环:

  1. 你输入按钮,弹出窗口显示
  2. 你点击,弹出隐藏(上下文菜单的默认行为)
  3. 按钮获得焦点,弹出窗口再次显示

如果您设置 ContextMenu 的“StaysOpen”属性会怎样?如果您以后不再有这种行为,我的怀疑是正确的。

关于c# - 尝试显示 ContextMenu 并单击其父项时发生 StackOverflowException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13901923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com