【问题标题】:few question on Xaml Visualstate created by Copied Template in UWP关于 UWP 中复制模板创建的 Xaml Visualstate 的几个问题
【发布时间】:2019-03-17 16:26:00
【问题描述】:

我对 UWP 中复制的模板创建的视觉状态几乎没有疑问。
我只是制作 NavigationView,以下是它的源代码。

<NavigationView Style="{StaticResource NavigationViewStyle1}"
    x:Name="navigationView"
    SelectedItem="{x:Bind ViewModel.Selected, Mode=OneWay}"
    Header="{x:Bind ViewModel.Selected.Content, Mode=OneWay}"
    IsSettingsVisible="False"
    Background="{ThemeResource SystemControlBackgroundAltHighBrush}"> ..omitted

我在设计视图上右键单击NavigationView,然后单击编辑模板并单击编辑副本(不确定它的名称,因为我的视觉工作室以韩语显示)。

如您所知,它创建了设计字典。我试图通过编辑其中的某些部分来熟悉这一点。然后,我想知道为什么TogglePaneButtonCollapsed visualstate 组存在。我会举一个例子来帮助你理解。

首先,我认为我应该编写 XAML 代码。我对 TogglePaneGroup 的 TogglePaneButtonCollapsed VisualState 感兴趣。

<Style x:Key="NavigationViewStyle1" TargetType="NavigationView">
    <Setter Property="PaneToggleButtonStyle"
            Value="{StaticResource PaneToggleButtonStyle}"/>
    <Setter Property="IsTabStop"
            Value="False"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="NavigationView">
                <Grid x:Name="RootGrid">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="DisplayModeGroup">
                            <VisualState x:Name="Compact"/>
                            <VisualState x:Name="Expanded">
                                <VisualState.Setters>
                                    <Setter Target="TogglePaneButton.Visibility" Value="Collapsed"/> <!-- I added-->
                                </VisualState.Setters>
                            </VisualState>
                            <VisualState x:Name="Minimal">
                                <VisualState.Setters>
                                    <Setter Target="HeaderContent.Margin" Value="48,5,0,0"/>
                                    <Setter Target="TogglePaneButton.Visibility" Value="Collapsed"/> <!-- I added-->
                                </VisualState.Setters>
                            </VisualState>
                            <VisualState x:Name="MinimalWithBackButton">
                                <VisualState.Setters>
                                    <Setter Target="HeaderContent.Margin" Value="104,5,0,0"/>
                                </VisualState.Setters>
                            </VisualState>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="TogglePaneGroup">
                            <VisualState x:Name="TogglePaneButtonVisible">
                                <VisualState.Setters>
                                    <Setter Target="PaneContentGridToggleButtonRow.Height" Value="200"/>
                                </VisualState.Setters>
                            </VisualState>
                            <VisualState x:Name="TogglePaneButtonCollapsed">
                                <VisualState.Setters>
                                    <Setter Target="TogglePaneButton.Visibility" Value="Collapsed"/>
                                    <Setter Target="PaneContentGridToggleButtonRow.Height" Value="2000"/>
                                </VisualState.Setters>
                            </VisualState>
                        </VisualStateGroup> .. omitted

我想知道TogglePaneButtonCollapsed 什么时候工作。我使 App 的窗口大小越来越小,但它们都没有触发 TogglePaneButtonCollapsed("make Toggle ButtonRow.Height == 2000") 的设置器。我在ExpanedMinimal 中添加了一些代码DisplayModegroup 使TogglePaneButton Visibility Collapsed。但它只有TogglePaneButtonVisible 中定义的 200 px 高度。不是 2000 像素高度。

据我所知,这个字典文件中没有 VisualState 触发器,并且 VisualState 触发器代码对开发人员隐藏,对吗?... 开发人员应遵守 Visualstate Group 和 VisualState 的名称。

那么最后一个问题是,为什么TogglePaneButtonCollapsed 视觉状态存在,我如何在没有定义视觉状态触发器的情况下使用它?我可以超载触发器吗?感谢您阅读我的帖子。

【问题讨论】:

    标签: xaml uwp visualstatemanager


    【解决方案1】:

    此字典文件中没有 VisualState Trigger,VisualState Trigger 代码对开发人员隐藏,对吗?...开发人员应遵守 Visualstate Group 和 VisualState 的名称。

    是的。默认的视觉状态是由它自己控制的(你可以认为它是它的代码隐藏,但由于 UWP 不是开源的,所以你看不到它)。您不能更改其名称或删除这些默认视觉状态。

    为什么存在 TogglePaneButtonCollapsed 视觉状态,以及如何在未定义视觉状态触发器的情况下使用它?我可以超载触发器吗?感谢您阅读我的帖子。

    这是设计使然。您可以使用VisualStateManager.GoToState(Control, String, Boolean) Method 在两种状态之间转换控件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 2011-05-12
      相关资源
      最近更新 更多