使用InitializeComponent()加载特定于设备的UI

时间:2017-01-24 04:58:25

标签: c# xaml uwp windows-10-universal xbox-one

使用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上运行时处理加载该视图?

1 个答案:

答案 0 :(得分:1)

好的,那么你想要做的可能是不可能的,但是实现这种功能的方法是:

  1. 对于特定于设备的视图,请使用设备系列的多个文件夹,并在其中添加XAML视图。编译器自动从文件夹加载xaml,从正常视图加载代码隐藏。有关此here
  2. 的详细信息

    但您想要的是在应用调整大小的多个视图之间切换,这样您可以使用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);
    

    有关切换视觉状态的更多信息here