c# - 如何禁用 Windows 8/WinRT AppBar?

标签 c# windows-8 microsoft-metro windows-runtime winrt-xaml

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

编辑:当您将 Visibility 设置为 Collapsed 时也会发生这种情况。

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

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

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

最佳答案

我已经尝试了一段时间(同时使用 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;

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

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

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

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

希望对您有所帮助!

关于c# - 如何禁用 Windows 8/WinRT AppBar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11958620/

相关文章:

c# - 调用 WebRequest 以调用 Web 服务的非常简单的调用就是每次以某种方式进行两次调用,一个没有凭据,一个有?

c# - 单色触摸 : Draggable MKAnnotationView

c# - 如何在排序字典中找到两个键之间的点

c# - 在 Entity Framework 中使用 Join、Group By 和 Sum

c# - .NET4.5 中异步 POST 方法的 HttpResponseMessage 异常

windows-8 - 如何在 Metro C# 应用程序中捕获屏幕

azure - 使用网络角色和辅助角色

c# - 我如何使用 DesignData 来帮助开发 Metro 应用程序?

html - 如何改变metro-ui网站的宽度

.net - Task<> 和 IAsyncOperation<> 有什么区别