如何禁用Windows 8/WinRT AppBar?

jok*_*efe 11 c# microsoft-metro windows-8 windows-runtime winrt-xaml

我的目标是在某种情况下只提供AppBar.我试图通过创建一个AppBar来实现这一目标,但在这种情况出现之前将其禁用.但是,如果您将IsEnabledAppBar上的属性设置为False,当您启动应用程序并右键单击(通常会打开AppBar)时,应用程序崩溃.这是框架中的错误吗?禁用AppBar的正确方法是什么?

编辑:这也是当你设置发生VisibilityCollapsed.

更多信息:我通过Visual Studio调试器运行它,但是弹出一个单独的"Visual Studio即时调试器"窗口,其中显示消息"App.exe [2596]中发生了未处理的win32异常".弹出一个警告框,上面写着"调试器附加到App.exe但未配置为调试此未处理的异常.要调试此异常,请分离当前的调试器."

编辑2:这不仅仅是我的代码.如果您只是添加IsEnabled="False"到Microsoft自己的示例AppBarControl项目中的AppBar,它也会崩溃(可在此处找到:http://code.msdn.microsoft.com/windowsapps/XAML-AppBar-control-sample-2aa1cbb4 )

编辑3:@G.Andrew Duthie - devhammer提供了我正在使用的答案.我只是想补充一点,我发现最好用this.BottomAppBar = null它来禁用它,而不是设置IsEnabledVisibility属性.如果您只是设置VisibilityCollapsed,那么当您右键单击时,应用程序仍然认为AppBar存在,即使它不可见,因此您的下一个常规点击将被解释为通常关闭AppBar的点击,因此您将必须再次单击才能实际执行您尝试的操作.

dev*_*mer 8

我一直在玩这个(使用IsEnabled,以及将Visibility属性设置为Visibility.Collapsed),并且我可以成功禁用AppBar而不引发异常的唯一方法是首先显示AppBar.显示AppBar后,将IsEnabled设置为false,或将Visibility设置为Visibility.Collapsed不再抛出异常.

但是,如果以编程方式创建AppBar,如下所示:

myAppBar = new AppBar();
StackPanel sp = new StackPanel();
sp.Orientation = Orientation.Horizontal;
Button myButton = new Button();
myButton.Content = "Click Me";
sp.Children.Add(myButton);
myAppBar.Content = sp;
Run Code Online (Sandbox Code Playgroud)

但是在第一次需要它之前不要将它添加到Page.BottomAppBar,你不会得到异常.

我使用带有以下处理程序的按钮进行了测试:

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    if (this.BottomAppBar == null)
    {
        this.BottomAppBar = myAppBar;
    }
    else {
        this.BottomAppBar = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

当应用程序第一次加载时,如果您尝试调用AppBar,则不会发生任何事情.单击按钮(将AppBar添加到Page.BottomAppBar),调用AppBar将显示AppBar.再次单击该按钮,不再显示AppBar(尽管myAppBar仍然实例化,并在您再次需要时准备就绪).

希望有所帮助!