Windows runtime 是否可以处理导致WinRT弹出按钮关闭的事件?

Windows runtime 是否可以处理导致WinRT弹出按钮关闭的事件?,windows-runtime,windows-store-apps,winrt-xaml,windows-8.1,flyout,Windows Runtime,Windows Store Apps,Winrt Xaml,Windows 8.1,Flyout,我有一个带有画布的Windows应用商店应用程序,用户可以使用。在底部的应用程序栏中,有一些用于选择颜色、笔划厚度等的按钮。这些按钮是通过显示一个弹出式元素来实现的,例如包含一个颜色选择器: <Page.BottomAppBar> <CommandBar IsSticky="True"> <AppBarButton ...> <AppBarButton.Flyout>

我有一个带有画布的Windows应用商店应用程序,用户可以使用。在底部的应用程序栏中,有一些用于选择颜色、笔划厚度等的按钮。这些按钮是通过显示一个弹出式元素来实现的,例如包含一个颜色选择器:

<Page.BottomAppBar>
    <CommandBar IsSticky="True">
        <AppBarButton ...>
            <AppBarButton.Flyout>
                <Flyout>
                    <ColorPicker .../>
                </Flyout>
            </AppBarButton.Flyout>
        </AppBarButton>
    </CommandBar>
</Page>

问题是,大多数用户(包括我自己)总是被一个小问题绊倒: 如果单击该按钮,弹出按钮将打开,您可以选择一种颜色。然后,您需要开始绘制并将手指(或手写笔)移动到画布上,以创建具有新颜色的笔划。但是,触摸事件仅关闭弹出按钮。看起来弹出型元素以某种方式捕获指针事件(尽管它不是UIElement)


有没有办法防止这个问题?理想情况下,当您触摸画布时,弹出按钮将关闭,但相同的触摸事件将由画布处理,因此您可以立即开始绘图。

我认为
弹出按钮
可能使用
弹出按钮
控件来显示其内容,因此,如果您可以找到,您可以更改
IsLightDismissEnabled
属性。否则-我只需使用
弹出窗口
而不是
弹出按钮
,这样您就可以控制其参数。

在这里,尝试以下操作:

var flyout = new SettingsFlyout();
Windows.UI.Xaml.Input.Pointer pointer = null;
flyout.PointerMoved += (s, e) => pointer = e.Pointer;
flyout.Unloaded += (s, e) => flyout.ReleasePointerCapture(pointer);

// cause it to hide
flyout.Hide();

祝你好运

如果我使用弹出窗口并将IsLightDismissEnabled设置为true,它将显示完全相同的行为。但这至少解释了弹出按钮的“指针捕获”是如何工作的。我想知道指针捕获是否真的是你的问题。但是没有更多的信息,这就是我能给你的谢谢,但我使用的是一个弹出按钮(不是SettingsFlyot),它没有任何这些事件或ReleasePointerCapture方法。