【发布时间】:2015-01-13 12:59:52
【问题描述】:
我需要一个列表框来根据页面方向显示不同的信息,所以开始寻找并找到了这个answer,实现如下:
在资源部分定义了 DataTemplates:
<DataTemplate x:Key="LandscapeTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Name="txtNombre" Text="{Binding Path=nombre}" TextWrapping="Wrap" Padding="0,10,0,0" FontSize="28" VerticalAlignment="Bottom"></TextBlock>
<TextBlock Name="txtSep" Text=" - " TextWrapping="Wrap" Padding="0,10,0,0" FontSize="22" VerticalAlignment="Bottom"></TextBlock>
<TextBlock Name="txtFecha" Text="{Binding Path=fecha_hora}" TextWrapping="Wrap" Padding="0,10,0,0" FontSize="22" VerticalAlignment="Bottom"></TextBlock>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="PortraitTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Name="txtNombre" Text="{Binding Path=nombre}" TextWrapping="Wrap" Padding="0,10,0,0" FontSize="28" VerticalAlignment="Bottom"></TextBlock>
</StackPanel>
</DataTemplate>
然后使用VisualStateManager如下:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="OrientationStates">
<VisualState x:Name="Landscape">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="lista"
Storyboard.TargetProperty="ItemTemplate">
<DiscreteObjectKeyFrame KeyTime="0"
Value="{StaticResource LandscapeTemplate}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
我的应用程序的默认方向是纵向,所以我最初将 PortraitTemplate 分配给我的列表框
<ListBox x:Name="lista"
SelectionChanged="ListBox_SelectionChanged"
ItemTemplate="{StaticResource PortraitTemplate}">
</ListBox>
然后在测试结果时,模板不会改变。我想知道我错过了什么?或者我还需要添加什么来更改模板
提前致谢。
附加信息:还尝试使用此info 实现我所需要的
【问题讨论】:
-
你页面的基类是 LayoutAwarePage 吗?正如您所遵循的答案的最后一行所指出的那样。
-
我试图检查,但不知道如何检查。
标签: c# xaml windows-phone-7