关于 Xaml 由 UWP 中的复制模板创建的 Visualstate 的几个问题

few question on Xaml Visualstate created by Copied Template in UWP

我对在 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,然后单击 编辑模板 并单击 编辑副本(不确定名称的,因为我的 visual studio 显示为韩语)。

如你所知,然后它创建了设计词典。我试图通过编辑其中的某些部分来熟悉它。然后,我想知道为什么 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 的大小 windows 变小变大,但是 none 的 App 触发了 TogglePaneButtonCollapsed("make Toggle ButtonRow. Height == 2000") 的 Setters。我在 Expaned 中添加了一些代码,在 DisplayModegroup 中添加了一些代码,以使 TogglePaneButton Visibility Collapsed。但它只有 200 像素的高度,正如它在 TogglePaneButtonVisible 中定义的那样。不是 2000 像素高度。

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

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

This dictionary file has no VisualState Trigger in it and VisualState Trigger code are hiding from developers, am I right?... and developer should comply with Name of Visualstate Group and VisualState.

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

Why does TogglePaneButtonCollapsed Visual state exist, and How I use it without define Visual State Trigger? can I overload the trigger?. Thank you for reading my post.

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