2014-02-26 61 views
2

我遇到了一個使用Windows Phone 8旋轉控件的奇怪問題。PivotItem頭在運行時更改

顯然,當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")); 
      } 
     } 
    } 
} 

然後初始化型號列表(可能發生在視圖模型,或頁面的代碼)

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個透視項目和標題顯示正確。現在,我們改變的第一個項目的DisplayName屬性的應用程序運行期間(以下稱按一下按鈕),並指定一個較長的字符串值:

Items[0].DisplayName = "Some other header"; 

這將導致頭重疊。 有什麼想法?

+0

奇怪的問題,你可以在最小的樣本中重現它嗎? –

+0

當然可以。我應該在哪裏發佈它? – eshaham

回答

0

埃拉德

如果設置DisplayName屬性爲「其他一些報頭」在第一時間,然後將值更改爲「模式2」時,正常顯示。所以,在我看來,這個問題是由pivot header width屬性引起的(在你的代碼中,文本塊的寬度)。加載數據透視表時,每個標題都有固定的寬度,此時,您將標題顯示名稱更改爲較長的值,則透視將無法正確顯示。

+0

是的,我意識到這是一個固定寬度的問題。我想知道如果任何人有任何想法如何優雅地引起標題刷新其佈局。 – eshaham