c# - 使用 Visual States 切换 AppBarButton 可见性时出现“未检测到已安装的组件”错误
问题描述
在我的 UWP 应用程序中,我有一个带有几个 AppBarButtons 的 CommandBar,我正在使用 Visual State 切换其可见性。每当我将任何视觉状态应用为VisualStateManager.GoToState(this, nameof(State1), false);
我收到以下错误:
未检测到已安装的组件。无法为 Setter 解析名称为“Button8”的目标对象。
按钮 (button8) 不为空。
XAML:
<Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <CommandBar x:Name="ActionsCommandBar" 最大宽度=“640” 水平对齐 =“左” 背景="透明" ClosedDisplayMode="紧凑" DefaultLabelPosition="右" IsDynamicOverflowEnabled="真" 溢出按钮可见性 =“自动” Style="{StaticResource CommandBarWithoutRevealStyle}"> <CommandBar.PrimaryCommands> <AppBarButton x:Name="Button1" Label="Button 1" /> <AppBarButton x:Name="Button2" Label="Button 2" /> <AppBarButton x:Name="Button3" Label="Button 3" /> <AppBarButton x:Name="Button4" Label="Button 4" /> <AppBarButton x:Name="Button5" Label="Button 5" /> <AppBarButton x:Name="Button6" Label="Button 6" /> <AppBarButton x:Name="Button7" Label="Button 7" /> <AppBarButton x:Name="Button8" Label="Button 8" /> <AppBarButton x:Name="Button9" Label="Button 9" /> </CommandBar.PrimaryCommands> </命令栏> <StackPanel Grid.Row="1" Orientation="Vertical" Margin="20"> <Button Content="Visual State 1" Click="Button_Click"/> <Button Content="Visual State 2" Click="Button_Click1"/> </堆栈面板> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="FolderStates"> <VisualState x:Name="State1" > <VisualState.Setters> <Setter Target="Button1.Visibility" Value="Visible" /> <Setter Target="Button2.Visibility" Value="Visible" /> <Setter Target="Button7.Visibility" Value="Visible" /> <Setter Target="Button8.Visibility" Value="Visible" /> <Setter Target="Button9.Visibility" Value="Visible" /> <Setter Target="Button4.Visibility" Value="Visible" /> </VisualState.Setters> </视觉状态> <VisualState x:Name="State2"> <VisualState.Setters> <Setter Target="Button1.Visibility" Value="Visible" /> <Setter Target="Button2.Visibility" Value="Collapsed" /> <Setter Target="Button7.Visibility" Value="Collapsed" /> <Setter Target="Button8.Visibility" Value="Collapsed" /> <Setter Target="Button9.Visibility" Value="Collapsed" /> <Setter Target="Button4.Visibility" Value="Collapsed" /> </VisualState.Setters> </视觉状态> </VisualStateGroup> </VisualStateManager.VisualStateGroups> </网格>
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
}
}
解决方案
我从另一个来源得到了答案。这是因为在页面渲染的时候,Button8实际上是在OverflowFlyout中。这意味着 Button8 未添加到可视化树中。(可以在Debug模式下打开实时可视化树来确认)。
VisualState 的切换是基于当前的可视化树。如果元素没有渲染,VisualState 在切换时会遇到错误。
所以我决定在后面的代码中处理它。
推荐阅读
- mongodb - Mongoose:尝试使用 .virtual 方法重命名
- c# - Xamarin 表单 NavigationPage.TitleView 需要在所有页面上
- python - 将列转换为财务会计格式工作表条件格式
- delphi - FASTREPORT 在报告脚本中动态添加对象
- spring - 如果有参数,SpringBoot websecurity 不会忽略 url
- mysql - 在 Joomla 中显示不同的日期格式
- html - 下拉菜单在所有页面上都没有响应
- python - 每次运行我的python代码时都会出错
- python - 调用多个数据框列名来构建新的数据框 keyerror
- c++ - FindWindowA 没有找到一些窗口