使用 Visual States 切换 AppBarButton 可见性时出现“未检测到已安装的组件”错误

Posted

技术标签:

【中文标题】使用 Visual States 切换 AppBarButton 可见性时出现“未检测到已安装的组件”错误【英文标题】:"No installed components were detected" error on toggling AppBarButton visibility with Visual States 【发布时间】:2020-06-22 07:47:54 【问题描述】:

在我的 UWP 应用程序中,我有一个带有几个 AppBarButtons 的 CommandBar,我正在使用 Visual State 切换其可见性。每当我将任何视觉状态应用为VisualStateManager.GoToState(this, nameof(State1), false);

我收到以下错误:

未检测到已安装的组件。具有名称的目标对象 无法为 Setter 解析“Button8”。

按钮(button8)不为空。

XAML:

 命令栏>
        
            
        堆栈面板>

        视觉状态>
                视觉状态>
            网格>

C#:

 private void Button_Click(object sender, RoutedEventArgs e)
 
    try
    
        VisualStateManager.GoToState(this, nameof(State1), false);
    
    catch (Exception ex)
    
        //No installed components were detected exception here 
    
 

 private void Button_Click1(object sender, RoutedEventArgs e)
 
    try
    
        VisualStateManager.GoToState(this, nameof(State2), false);
    
    catch (Exception ex)
    
        //No installed components were detected exception here 
    
 

【问题讨论】:

嗨,您将整个类“this”作为参数传递给 GoToState 函数,而不是将您的控件作为参数传递。这解决了问题。 public static bool GoToState(Control control, string stateName, bool useTransitions); 谢谢@Noorul。传递 ActionsCommandBar 而不是这个可以防止异常,但它不起作用,因为在这种情况下按钮的可见性不受视觉状态的影响。 【参考方案1】:

我从another source 得到了答案。这是因为在页面渲染的时候,Button8实际上是在OverflowFlyout中。这意味着 Button8 未添加到可视化树中。 (可以在Debug模式下打开实时可视化树来确认)。

VisualState 的切换是基于当前的可视化树。如果元素没有渲染,切换时VisualState会报错。

所以我决定在后面的代码中处理它。

【讨论】:

以上是关于使用 Visual States 切换 AppBarButton 可见性时出现“未检测到已安装的组件”错误的主要内容,如果未能解决你的问题,请参考以下文章

libwebsocket协议切换状态机

切换 Visual Studio 用户 - Visual Studio Premium

在 Visual Assist 或 Vanilla Visual Studio 中切换枚举的自动完成功能

在Windows上使用visual studio在本机环境中进行iphone应用程序开发的优势

带有 Visual Studio 2015 的 Git 切换分支导致更改

在 Visual Studio 2019 中的编译器指令之间切换?