StackPanel IsMouseOver为False - 当鼠标悬停在StackPanel项之间的间隙时

4

我有以下的WPF控件

enter image description here

当应用程序运行时,它看起来像这样。

enter image description here

问题是 - 当我的鼠标位于按钮之间的空白处时,弹出窗口会关闭。(U、B和NB按钮之间的间隙)
正如您所看到的 - Popup.IsOpen属性绑定到stackPanel - IsMouseOver 我该如何解决这个问题?以便在我的鼠标位于上述按钮之间时弹出窗口保持打开?(最好不使用任何代码后台)

在绑定表达式中显式设置值为True有什么区别吗?例如:“{Binding ElemenetName=UBPanel, Path=IsMouseOver, Value="True", ....}” - sous2817
我认为你不能这样写。至少智能感知对此不满意。 - Marty
2个回答

7
将 StackPanel 设置为透明(或任何你觉得合适的颜色)。由于某些原因,设置背景画刷(即使是透明的)允许 IsMouseOver 工作正常。可能与 WPF 的布局和渲染优化有关。
    <Grid>
        <StackPanel x:Name="ThePanel" Background="Transparent">
            <TextBox Margin="5">WOOT</TextBox>
            <TextBox Margin="5">WOOT</TextBox>
            <TextBox Margin="5">WOOT</TextBox>
        </StackPanel>

        <Popup IsOpen="{Binding ElementName=ThePanel, Path=IsMouseOver, Mode=OneWay}">
            <!--stuff-->
        </Popup>
    </Grid>

1
你知道为什么这个能用而StackPanel不行吗?对我来说似乎不是很直观... - sous2817
1
@sous2817 WPF和直觉,这是一个危险的组合!实际上,你的问题让我测试了一下设置stackpanel的背景属性。它也可以工作!我之前从未意识到这一点,因为我在使用.xaml图像和鼠标悬停检测时遇到了这个问题,对于这些情况,将其放在边框中是有意义的。我会调整我的解决方案。谢谢! - Rowbear
非常出色,如果我能给你的答案点赞两次,我一定会的!现在我只需要记住这个问题,以备将来遇到。 - sous2817
太好了!我也遇到了DockPanel的同样问题,这个解决方案很有效。 - Night94

2

所有面板的背景默认值为null,当背景为null时,触摸和鼠标事件将无法工作。请将stackpanel的背景设置为透明或其他颜色。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接