【问题标题】:UWP - VisualStateManager.GoToState() does not workUWP - VisualStateManager.GoToState() 不起作用
【发布时间】:2017-06-28 23:20:19
【问题描述】:

我是第一次使用 VisualStateManager。不幸的是,我没有让它运行。

这是我的 XAML 代码:

<SplitView x:Name="spltvw" IsPaneOpen="False" DisplayMode="CompactInline" 
               CompactPaneLength="48" Grid.Row="1" PaneBackground="#FFDADADA">
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup>
                <VisualState x:Name="lowerThan7State">
                    <VisualState.Setters>
                        <Setter Target="spltvw.DisplayMode" Value="Overlay" />
                    </VisualState.Setters>
                </VisualState>
                <VisualState x:Name="defaultState">
                    <VisualState.Setters>
                        <Setter Target="spltvw.DisplayMode" Value="CompactInline" />
                    </VisualState.Setters>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
        ....
</SplitView>

这是我的代码隐藏:

    private void Page_Loaded(object sender, RoutedEventArgs e)
    {
        bool test = false;
        if(IsScreenSizeLessThan7inches())
            test = VisualStateManager.GoToState(this, lowerThan7State.Name, true);
        else
            test = VisualStateManager.GoToState(this, defaultState.Name, true);
    }

我已经尝试更改“useTransitions”参数。我已经调试并测试了“IsScreenSizeLessThan7inches()”方法。但是这种方法的结果是正确的。

GoToState() 方法的返回值始终为 false,SplitView-Control 的状态也没有改变。

我没发现问题...

请帮我找出错误。

谢谢!

【问题讨论】:

  • 简单地说,您在 SplitView 中添加视觉状态以改变其状态。在 SplitView 之外添加视觉状态,它应该像魅力一样工作。
  • 是的。这就是解决方案!谢谢!
  • 请将您所做的作为答案发布并将其标记为答案,以便对其他人也有帮助。

标签: uwp state


【解决方案1】:

AVK 的评论很有帮助。

我已将 VisualStateManager 放在 SplitView 之外,现在它可以工作了。

这是我所做的:

<Grid Background="LightGray">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup>
            <VisualState x:Name="lowerThan7State">
                <VisualState.Setters>
                    <Setter Target="spltvw.DisplayMode" Value="Overlay" />
                </VisualState.Setters>
            </VisualState>
            <VisualState x:Name="defaultState">
                <VisualState.Setters>
                    <Setter Target="spltvw.DisplayMode" Value="CompactInline" />
                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Grid.RowDefinitions>
        <RowDefinition Height="48"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
    </Grid.RowDefinitions>
    <StackPanel Grid.Row="0" Background="#FFC31727" Orientation="Horizontal">
        <Button Name="btn_hamburger" Width="48" VerticalAlignment="Stretch" Click="btn_hamburger_Click">
            <FontIcon FontFamily="Segoe MDL2 Assets" Glyph="&#xE700;" Foreground="White" />
        </Button>
        <TextBlock Margin="10,0,80,0" FontSize="25" VerticalAlignment="Center" Foreground="White" FontWeight="Bold">
            ***-App
        </TextBlock>
    </StackPanel>
    <Grid Grid.Row="0" HorizontalAlignment="Right" Margin="0,0,4,0" VerticalAlignment="Center">
        <Image Source="ms-appx:///Assets/***_Logo_weiss.png" Height="44" />
    </Grid>
    <SplitView x:Name="spltvw" IsPaneOpen="False" DisplayMode="CompactInline" OpenPaneLength="250"
               CompactPaneLength="48" Grid.Row="1" PaneBackground="#FFDADADA" SizeChanged="spltvw_SizeChanged">
        ...
    </SplitView>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 2021-07-22
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多