我在XAML中有两个listBox ItemTemplate。但我无法使用Page的orientationChanged事件更改它以更改DataTemplate。 这是代码:
protected override void OnOrientationChanged(OrientationChangedEventArgs e)
{
if (e.Orientation == PageOrientation.Landscape ||
e.Orientation == PageOrientation.LandscapeLeft ||
e.Orientation == PageOrientation.LandscapeRight)
{
this.HeadLineListBox.ItemTemplate = (DataTemplate)this.Resources["L_headerTemplate"];
}
else if (e.Orientation == PageOrientation.Portrait ||
e.Orientation == PageOrientation.PortraitDown ||
e.Orientation == PageOrientation.PortraitUp)
{
this.HeadLineListBox.ItemTemplate = (DataTemplate)this.Resources["P_headerTemplate"];
}
base.OnOrientationChanged(e);
}
当我第一次进入页面时,如果Orientation是Portrait,它将始终显示Portrait DataTemplate,即使我更改了Orientation。所以,当我第一次进入页面时,它是Landscape.Someone可以帮助我吗?
PS:我使用的方式发布在这里:http://wp7-developer.com/code-snippet/changing-the-datatemplate-based-on-page-orientation/但它仍然不起作用。
答案 0 :(得分:1)
您需要在分配新的itemtemplate后再次绑定itemsource以将更新的itemtemplate应用为 -
if (e.Orientation.ToString().Contains("Portrait"))
lstData.ItemTemplate =
(DataTemplate)this.Resources["listPortrait"];
else
lstData.ItemTemplate =
(DataTemplate)this.Resources["listLandscape"];
lstData.ItemsSource = null;
lstData.ItemsSource = ((Products)this.Resources["productCollection"]).DataCollection;
答案 1 :(得分:0)
不幸的是,我不认为这会起作用。将项目添加到ListBox时应用ItemTemplate。您可以使用以下代码段和您自己的单独模板对此进行测试:
// Constructor
public MainPage()
{
InitializeComponent();
Loaded += (sender, e) =>
{
DispatcherTimer t = new DispatcherTimer();
t.Interval = TimeSpan.FromSeconds(5);
t.Tick += (sender2, e2) =>
{
MyListBox.Items.Add(this.Orientation.ToString());
};
t.Start();
};
}
效果很有趣。在我的示例中,当我旋转模拟器时,以下输出被写入列表框:
THIS IS THE PORTRAIT TEMPLATE: PortraitUp
THIS IS THE LANDSCAPE TEMPLATE: LandscapeLeft
THIS IS THE LANDSCAPE TEMPLATE: LandscapeRight
THIS IS THE LANDSCAPE TEMPLATE: LandscapeLeft
THIS IS THE PORTRAIT TEMPLATE: PortraitUp
过去对我有用的另一种方法是使用两个完全不同的布局管理器 - 一个针对纵向布局进行了优化,另一个针对横向进行了优化 - 并根据方向的变化切换每个布局的可见性/不透明度。我过去使用过这种技术,它提供了很好的Blendability和不错的性能(如果你的页面不是太复杂)。我仍然在努力寻找“最佳”方法,但至少我知道这个方法有效。
/克里斯