嗨,我正在开发一个 Metro 应用程序,我的应用程序在横向模式下运行良好,但现在我想让它也与纵向模式兼容。
这就是我定义学生列表框的方式:-
<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)当触发方向改变事件时,如何在运行时代码隐藏中减少/增加列表框的项目模板内存在的文本块的宽度。?
3)此时视觉状态是否有用,如果有,那么如何?
4)还有其他方法可以解决问题吗,我是否缺少任何替代方法?
请帮帮我,在此先感谢。