首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止打开CommandBar吞咽指针事件

防止打开CommandBar吞咽指针事件
EN

Stack Overflow用户
提问于 2016-10-31 15:12:24
回答 1查看 130关注 0票数 0

我有一个带有CommandBar的网格。只有当指针在网格或任何子组件上悬停时,我才想显示CommandBar。

我通过在我的CommandBar事件中将IsOpen设置为true来显示PointerEntered。不幸的是,打开的CommandBar正在吞咽PointerExited事件,而我无法关闭CommandBar。

我发现的事情:

  • 如果我把IsEnabled设为真,CommandBar做得很好.(但我的按钮是禁用的;)
  • 如果我设置了ClosedDisplayMode而不是IsOpen,它也能工作,但是隐藏和打开之间没有很好的转换。

什么是吞食我的指针事件,我如何防止这一点?还是你对我的问题有不同的解决方案?

这里是一个简化的例子:

代码语言:javascript
复制
<!-- Some content -->
            
<!-- Grid with command bar -->
<Grid Height="300" Width="700" PointerEntered="Grid_PointerEntered" PointerExited="Grid_PointerExited" BorderBrush="Black" BorderThickness="1">
  <!-- Template just set Visibility of "MoreButton" to Collapsed (hiding it because it is not needed if you have hover ability) -->
  <CommandBar VerticalAlignment="Bottom" Canvas.ZIndex="1" x:Name="uxCommandBar" Template="{StaticResource CommandBarControlTemplate1}">
    <!-- Buttons -->                  
  </CommandBar>
  
  <!-- Other content stuff - here a Canvas for providing a hoverable area -->
  <Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Red"></Canvas>
</Grid>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-31 21:50:41

有两件事在脑海中浮现:

  1. 默认情况下,对于命令栏,IsSticky是false,这意味着它将在轻微解散(即单击命令栏元素之外的任何位置)时自动将IsOpen设置为false。它通过在打开时将命令栏和透明网格显示为弹出来实现这一点。透明的网格是消耗指针事件的东西。将IsSticky设置为true以防止此行为。
  2. 命令栏可以直接在页面上设置(通过TopAppBar/BottomAppBar属性),也可以像其他属性一样作为子元素放置到可视树中的任何地方。您可能需要将命令栏设置为网格中某个位置的子元素,而不是直接在页面上设置它,否则一旦您将鼠标移动到命令栏上,PointerExited事件就会被触发。
代码语言:javascript
复制
<Page>
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid PointerEntered="Grid_PointerEntered" PointerExited="Grid_PointerExited">
            <CommandBar x:Name="bar" IsSticky="True" VerticalAlignment="Bottom">
                <AppBarButton Icon="Accept" Label="Done"/>
            </CommandBar>
        </Grid>
    </Grid>
</Page>
代码语言:javascript
复制
private void Grid_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    bar.IsOpen = true;
}

private void Grid_PointerExited(object sender, PointerRoutedEventArgs e)
{
    bar.IsOpen = false;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40345050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档