我在使用Windows Phone 8枢轴控件时遇到了一个奇怪的问题。
显然,当Pivot绑定到模型列表并且HeaderTemplate用于绑定到模型的某个属性时,在运行时更改属性会导致标题中出现布局问题。
以下是示例代码。 创建一个简单的模型类。
public class MyModel: INotifyPropertyChanged
{
private string _displayName;
public event PropertyChangedEventHandler PropertyChanged;
public string DisplayName
{
get
{
return _displayName;
}
set
{
_displayName = value;
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("DisplayName"));
}
}
}
}
然后初始化模型列表(可能出现在ViewModel或页面代码中)
Items = new List<MyModel>
{
new MyModel { DisplayName = "model 1" },
new MyModel { DisplayName = "model 2" },
}
将模型列表连接到枢轴控件
<phone:Pivot ItemsSource="{Binding Items}" DisplayMemberPath="DisplayName">
<phone:Pivot.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding DisplayName}" />
</DataTemplate>
</phone:Pivot.HeaderTemplate>
</phone:Pivot>
现在我们有2个透视项目,标题正确显示。现在我们在app运行时更改第一个项目的DisplayName属性(比如按下按钮)并分配一个更长的字符串值:
Items[0].DisplayName = "Some other header";
这会导致标题重叠。 有什么想法吗?
答案 0 :(得分:0)
埃拉德
如果您在第一次将displayName属性设置为“Some other header”,然后将值更改为“model 2”,则正常显示。所以,在我看来,这个问题是由pivot头宽度属性引起的(在你的代码中,是文本块的宽度)。加载数据透视表时,每个标题都有固定的宽度,此时,您将标题显示名称更改为较长的值,数据透视图将无法正确显示。