我在使用带有Caliburn Micro和WP8的Pivot控件时遇到了一个问题。当我更新子ViewModels(透视项目)的DisplayName时,透视标题的间距不会更新以反映这一点。因此,枢轴标题彼此重叠,看起来非常混乱。
示例:
WP7版本:
WP8版本:
此问题仅在我们仅从目标WP7 / WP8迁移到WP8时开始。有没有人有任何关于如何在更改DisplayName时更新间距的想法,以及透视标题文本?谢谢!
答案 0 :(得分:1)
我知道你问这个问题已经过了很长时间,但我得到了一个解决方案。
微软承诺在WP8中解决了这个问题,但它仍然没有。
为了正确呈现标题,您必须更改数据透视表项的宽度。
所以这是一个示例代码宽度x:Name =" PivotControl"设置为Pivot:
double width = PivotControl.Width;
double width2 = Application.Current.Host.Content.ActualWidth+10;
PivotControl.Width = width2;
await Task.Delay(1);
PivotControl.Width = width;
这会将宽度更改为比yoru屏幕宽度稍微多一点,并且在1ms之后将其更改回来,以便正确呈现项目并更新布局(因为LayoutUpdate不起作用)。
答案 1 :(得分:0)
Here是更好的解决方案
Pivot标题模板:
<!-- The SizeChanged event is key here. We have to invalidate an ancestor when we get this event. -->
<DataTemplate x:Key="pivotHeaderTemplate">
<TextBlock SizeChanged="OnHeaderSizeChanged" Text="{Binding SomeData}"/>
</DataTemplate>
支点:
<phone:Pivot Title="WHATEVER"
DataContext="{StaticResource query}"
ItemsSource="{Binding source}"
HeaderTemplate="{StaticResource pivotHeaderTemplate}"
ItemContainerStyle="{StaticResource pivotItemStyle}"/>
代码隐藏:
/// <summary>
/// When something inside of the template changes, then we need to invalidate the measure of the ancestor PivotHeadersControl
/// </summary>
private void OnHeaderSizeChanged(object sender, SizeChangedEventArgs e)
{
FrameworkElement fe = (FrameworkElement)sender;
while (fe != null)
{
if (fe is PivotHeadersControl)
{
fe.InvalidateMeasure();
break;
}
fe = VisualTreeHelper.GetParent(fe) as FrameworkElement;
}
}