在Windows 8.1中如何在其他地方设置焦点时保持SettingsFlyout可见?

Mar*_*han 5 c# xaml flyout windows-runtime windows-8.1

在Windows 8.1中,当本机SettingsFlyout可见时,我点击其他地方,无论是在我的应用程序还是在其他应用程序中,弹出按钮都会消失.

有没有办法让它保持可见,直到我手动解雇?我的用例 - 我想显示"登录"SettingsFlyout,当用户离开应用程序并搜索他的登录名和密码时,它不会消失.

我已经检查了它的MSDN页面,但没有找到"Sticky"弹出窗口的简单属性.

谢谢你的提示!

Shu*_*han 6

有一种方法可以在不使用带有SDK中默认控件的Callisto库的情况下执行此操作.

public class CustomSettingsFlyout : SettingsFlyout
{
    bool back = false;
    private Popup popup;
    public void ShowWindow()
    {
        ShowIndependent();
        back = false;
        popup = (Parent as Popup);
        popup.IsLightDismissEnabled = false;
        popup.Closed += Popup_Closed;
        this.BackClick += CustomSettingsFlyout_BackClick;
    }

    void CustomSettingsFlyout_BackClick(object sender, BackClickEventArgs e)
    {
        back = true;
    }

    private void Popup_Closed(object sender, object e)
    {
        if (!back) popup.IsOpen = true;
    }



}
Run Code Online (Sandbox Code Playgroud)

现在调用ShowWindow方法是新控件上ShowIndependent的位置.

CustomSettingsFlyout flyout = new CustomSettingsFlyout();
flyout.Content = new Grid();
flyout.ShowWindow();
Run Code Online (Sandbox Code Playgroud)


小智 1

无法使用默认 API 使 SettingsFlyout 像 AppBar 那样“粘性”。实现您的场景的最佳方法是制作一个类似 SettingsFlyout 的自定义弹出窗口;Callisto 库实现了一个,您可以关闭 Popup 上的 IsLightDismissEnabled 以使其“粘性”。