【问题标题】:Select a different grid based on a converter's value for a UWP app根据 UWP 应用的转换器值选择不同的网格
【发布时间】:2016-08-10 23:35:43
【问题描述】:

在 UWP 应用中,我有一个返回 3 个值的属性。我想使用转换器显示基于此值的不同网格。实现这一目标的最佳方法是什么?我认为我将朝着的方向是创建 3 个不同的网格模板,然后根据转换器返回的内容将样式设置为这 3 个模板之一。有谁知道这是否可行?我的网格不必是网格,它可以是内容控件或类似的东西。我基本上想根据属性显示不同的 UI 部分

谢谢

【问题讨论】:

  • 这是一个 Windows 通用应用程序吗?
  • 是的,抱歉,一个 UWP 应用
  • 我想我可能只是将所有 3 个网格放入并使用枚举到可见性转换器来控制它们的可见性

标签: xaml win-universal-app converter


【解决方案1】:

我会使用WindowsStateTriggers NuGet 包。

安装后,您可以在 xaml 顶部引用

xmlns:triggers="using:WindowsStateTriggers"

并假设您的后端类中有一个名为 IsBusy

的属性
public bool IsBusy { get; set; } = false;

例如,您的 xaml 中有 2 个简单的网格。

<StackPanel x:Name="root">
    <Grid x:Name="RedGrid" Background="Red" Width="200" Height="100" />
    <Grid x:Name="GreenGrid" Background="Green" Width="200" Height="100" Visibility="Collapsed"/>
</StackPanel>

您可以设置一个可视状态组来根据 IsBusy 属性显示网格。当 IsBusy = true 时,我们希望绿色网格可见,红色网格折叠

 <StackPanel x:Name="root">
     <VisualStateManager.VisualStateGroups>
         <VisualStateGroup>
             <VisualState x:Name="IsBusy">
                 <VisualState.StateTriggers>
                     <triggers:EqualsStateTrigger EqualTo="True" Value="{Binding IsBusy, ElementName=root}" />
                 </VisualState.StateTriggers>
                 <VisualState.Setters>
                     <Setter Target="RedGrid.Visibilty" Value="Collapsed"/>
                     <Setter Target="GreenGrid.Visibility" Value="Visible" />
                 </VisualState.Setters>
             </VisualState>
         </VisualStateGroup>
     </VisualStateManager.VisualStateGroups>
     <Grid x:Name="RedGrid" Background="Red" Width="200" Height="100" />
     <Grid x:Name="GreenGrid" Background="Green" Width="200" Height="100" />
 </StackPanel>

NB {Binding IsBusy, ElementName=root} 取决于您的 DataContextIsBusy 属性的位置。这里只是在页面后面的代码中。 希望能给你一个想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2022-12-12
    • 1970-01-01
    相关资源
    最近更新 更多