0

使用 UWP 编写特定于设备的 XAML 时,我们可以为每个设备系列创建不同的 XAML 视图。例如,Track.DeviceFamily-Xbox.xaml。此页面使用相同的后端,Track.xaml但会在 Xbox 上使用应用程序时加载。

我们还可以将 URL 传递InitializeComponent()给加载特定 xaml 页面的方法。

现在我想知道是否可以将这些方法结合在一起。在此示例中,我希望在全屏时加载 Xbox UI。以下代码将是执行此操作的理想方式,但是..我在这里,所以它不起作用:)

 public Track()
 {
        // If the app is full screen, we can use the Xbox UI
        if (App.IsFullScreen)
        {
            InitializeComponent(new Uri("ms-appx:///Views/Track.DeviceFamily-Xbox.xaml", UriKind.Absolute));
        }
        else
        {
            InitializeComponent();
        }

        // etc ...    
    }

有人对我能做什么有任何想法吗?有没有办法加载 Xbox 特定视图,或者我应该只创建 XAML 视图,调用它TrackXbox.xaml,然后在用户全屏或在 Xbox 上运行时处理加载该视图?

4

1 回答 1

1

好的所以你试图做的可能是不可能的,但实现这种功能的方法是:

  1. 对于特定于设备的视图,请使用设备系列的多个文件夹并在其中添加 XAML 视图。编译器会自动从文件夹加载 xaml,并从普通视图加载代码隐藏。更多关于这里的信息。

但是您想要的是在应用程序调整大小的多个视图之间切换,因此您可以使用VisualStates以下内容:

 <VisualStateManager.VisualStateGroups>
        <VisualStateGroup>
            <VisualState x:Name="Normal">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="900"/>
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <--For larger screensizes-->
                    <Setter Value="3" Target="MyDummyButton.(Grid.RowSpan)"/>
                </VisualState.Setters>

            </VisualState>
            <VisualState x:Name="Mobile">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="0"/>
                </VisualState.StateTriggers>
                <VisualState.Setters>

                    <Setter Value="1" Target="MyDummyButton.(Grid.RowSpan)"/>
                                        </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>

现在,当您想在同一设备系列中的多个视图之间切换时,您可以从 codeBehind 中的 c#

VisualStateManager.GoToState(this, "Normal", useTransitions);

有关在此处切换视觉状态的更多信息。

于 2017-01-24T05:38:06.673 回答