2

こんにちは私はメトロアプリを開発しています。私のアプリはランドスケープモードで完全に正常に動作しますが、ポートレートモードとも互換性を持たせたいと思います。

これは私が学生リストボックスを定義した方法です:-

 <ListBox x:Name="lstbxbStudents"   Background="Transparent" Height="Auto"  ScrollViewer.VerticalScrollBarVisibility="Auto"  SelectionChanged="lstbxbStudents_SelectionChanged_1" HorizontalAlignment="Left" Width="Auto" Margin="4,50,0,122" Style="{StaticResource ListBoxStyle1}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <StackPanel Width="100"  Orientation="Horizontal">
                            <TextBlock Text="{Binding stunum}" VerticalAlignment="Center" HorizontalAlignment="Left" />
                        </StackPanel>
                        <StackPanel Width="450">
                            <TextBlock Text="{Binding studsc}"   HorizontalAlignment="Left" />
                        </StackPanel>
                        <StackPanel Orientation="Horizontal"  Width="180">
                            <StackPanel>
                                <TextBlock Width="50" Text="{Binding stu_cod}" x:Name="txtblkstucode"   HorizontalAlignment="Right" />
                            </StackPanel>
                        </StackPanel>
                        <StackPanel Width="150">
                            <TextBlock Text="{Binding stuby_prc}" VerticalAlignment="Center" TextAlignment="Right" HorizontalAlignment="Center" />
                        </StackPanel>
                        <StackPanel Width="100">
                            <TextBlock Text="{Binding stuqty, Mode=TwoWay}"  TextAlignment="Center" x:Name="txtbxbqty" Tag="{Binding stunum}"     VerticalAlignment="Center"   HorizontalAlignment="Right" />
                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

リストボックスのitemtemplate内に存在するテキストブロックの幅はすでに定義されているため、横向きモードから縦向きモードに回転すると、存在するすべてのデータを表示できなくなります(横向きモードに比べて縦向きモードの幅が狭いため、カットオフされます。

1)同じリストボックスに2つのアイテムテンプレートを設定し、現在の向きに応じてこれら2つのテンプレートを切り替えることはできますか?

2)orentationchangedイベントが発生したときにランタイムコードビハインドのリストボックスのアイテムテンプレート内に存在するテキストブロックの幅を増減するにはどうすればよいですか?

3)この時点で視覚的な状態は役に立ちますか?もしそうなら、どのように??

4)問題を解決できる他の方法はありますか?代替手段がありませんか?

助けてください、よろしくお願いします。

4

1 に答える 1

2

using 表示状態を変更できますItemTemplate。最初に両方のアイテム テンプレートをリソースに配置します。

<Page.Resources>
    <DataTemplate x.Key="Landscape">
         <!-- your landscape template -->
    </DataTemplate>
    <DataTemplate x.Key="Portrait">
         <!-- your portrait template -->
    </DataTemplate>
</Page.Resources>

最初にランドスケープ テンプレートを に割り当てListBoxます。

<ListBox x:Name="listbox" ItemTemplate="{StaticResource Landscape}" />

VisualStateManager表示状態のテンプレートを変更しFullScreenPortraitます。

<VisualStateManager.VisualStateGroups>
    <VisualState x:Name="FullScreenPortrait">
        <Storyboard>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="listbox" Storyboard.TargetProperty="ItemTemplate">
                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource Portrait}"/>
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
    </VisualState>
</VisualStateManager.VisualStateGroups>

LayoutAwarePageこれを機能させるには、ページの基本クラスとして使用していることを確認してください。

于 2013-03-16T05:57:57.783 に答える