PivotItem标头在运行时更改

时间:2014-02-26 06:21:49

标签: xaml windows-phone-8

我在使用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";

这会导致标题重叠。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

埃拉德

如果您在第一次将displayName属性设置为“Some other header”,然后将值更改为“model 2”,则正常显示。所以,在我看来,这个问题是由pivot头宽度属性引起的(在你的代码中,是文本块的宽度)。加载数据透视表时,每个标题都有固定的宽度,此时,您将标题显示名称更改为较长的值,数据透视图将无法正确显示。