C# 使用StaysOpen时,WPF弹出窗口将立即关闭
我定义了一个弹出窗口:C# 使用StaysOpen时,WPF弹出窗口将立即关闭,c#,wpf,xaml,mvvm,popup,C#,Wpf,Xaml,Mvvm,Popup,我定义了一个弹出窗口: <Popup StaysOpen="False" IsOpen="{Binding IsOpen, Mode=TwoWay}" /> 命令只执行以下代码(在我的视图模型中): 现在奇怪的是: 打开弹出窗口后,IsOpenproperty setter上的断点立即被值false击中,导致弹出窗口立即关闭 如果我删除StaysOpen=“False”(然后默认为True),则不会发生这种情况 这就像弹出窗口正在显示,但它没有获得/失去焦点,它关闭了 但我不明白为
<Popup StaysOpen="False" IsOpen="{Binding IsOpen, Mode=TwoWay}" />
命令只执行以下代码(在我的视图模型中):
现在奇怪的是:
打开弹出窗口后,IsOpen
property setter上的断点立即被值false
击中,导致弹出窗口立即关闭
如果我删除StaysOpen=“False”
(然后默认为True
),则不会发生这种情况
这就像弹出窗口正在显示,但它没有获得/失去焦点,它关闭了
但我不明白为什么?Popup.StaysOpen属性: 获取或设置一个值,该值指示当控件不再处于焦点时弹出控件是否关闭 如果在IsOpen属性设置为false时弹出控件关闭,则为true; 如果在弹出控件外部发生鼠标或键盘事件时弹出控件关闭,则为false。默认值为true 当您将此值设置为false时,一旦“弹出控件外发生鼠标或键盘事件”,它将关闭。由于人类做出的微小、不可避免的鼠标移动,你应该立即得到一个“MouseMoved”事件,除非鼠标在弹出窗口上出现
当您将
StaysOpen
设置为false时,IsOpen
的值也会被忽略。让我确定我理解了:您将一个值设置为false,然后怀疑它是否设置为false并对设置为false的值作出反应?@Christopher不,我没有将其设置为false
,这是“WPF系统”中的某个地方的要点它被设置为false,这是由于StaysOpen=“false”
Right。。。没有想到其他很多事件只是在弹出窗口外剪辑。。。仔细阅读文档的教训:)@MichałTurczyn“体验太棒了。不幸的是,你只有在你需要它的时候才能得到它。”-我的一个老朋友。另一个,希望是快速的问题:我在弹出窗口上有一个按钮,我必须点击两次,才能真正触发它的命令。就像弹出窗口是焦点一样,首先我必须单击“取消焦点”弹出窗口,然后我可以单击我的按钮。@MichałTurczyn我知道一个复选框和一个数据网格也有类似的行为。IIRC DataGrid元素“吃掉”Click事件,只是将焦点放在复选框上。我记不起脑子里到底是怎么回事了。最好你问一个单独的问题,因为这涉及到我现在不知道的WPF细节。好吧,事实证明,删除处理焦点事件的事件处理程序解决了这个问题,但我很不确定。。。我用弹出窗口创建了一个新的项目,它按预期工作。很可能是昨天,我用大量的“测试代码”充实了我的主要项目,结果它开始表现得很奇怪。。。谢谢你的支持。
<Button Command="{Binding OpenPopupCommand}" />
IsOpen = true;