2013-10-30 30 views
2

我想在運行時設置主題頭。 以下解決方案適用於第一項。在運行時更改主題頭

StackPanel sp = new StackPanel(); 
TextBlock tb1 = new TextBlock(); 
tb1.Text = "bla"; 
TextBlock tb2 = new TextBlock(); 
tb2.Text = "blub"; 

sp.Children.Add(tb1); 
sp.Children.Add(tb2); 

PivotItem pivotitem = new PivotItem { Header = sp }; 

WorkoutPivot.Items.Add(pivotitem); 

在兩個或更多項目中,它會引發異常:「值不在預期範圍內」。

我需要其他方式來做到這一點。

感謝, Rouven

回答

0

如果你想(重新)定義Pivot頭的樣子,那麼你必須使用Pivot.HeaderTemplate屬性,它是DataTemplate類型的(這將影響其所有PivotItems兒童)。

它不能與PivotItem.Header屬性這不是一個模板,但包含數據的對象要被綁定到的標題DataTemplate每個PivotItem來完成。

因此,理論上,您必須在您的代碼(及其所有內容)中創建一個DataTemplate,然後將其分配給您的Pivot.HeaderTemplate屬性。在此article

一種解決方案可能是以下一個解釋:

1.創建您的DataTemplate這樣的(或者從資源中檢索它):

string xaml = 
    @"<DataTemplate 
    xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" 
    xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""> 
    <StackPanel> 
     <TextBlock Text='bla' /> 
     <TextBlock Text='blub' /> 
    </StackPanel>   
    </DataTemplate>"; 
DataTemplate dt = (DataTemplate)XamlReader.Load(xaml); 

2.然後分配dt您的Pivot.HeaderTemplate財產:

yourPivot.HeaderTemplate = dt; 

話雖這麼說,並確保它是真的,你需要什麼

如果你不想改變你的Pivot頭的樣子,但只有什麼必然頭DataTemplate(文本包含和等等...),那麼你只需要爲你的PivotItem.Header屬性指定另一個值。

例如一個頭DataTemplate類似以下:

<DataTemplate 
     xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" 
     xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""> 
     <StackPanel> 
      <TextBlock Text='{Binding Test1}' /> 
      <TextBlock Text='{Binding Test2}' /> 
     </StackPanel>   
    </DataTemplate> 

和POCO這樣的:

public class TestPOCO 
    { 
     public string Test1 { get; set; } 
     public string Test2 { get; set; } 
    } 

你可以改變你PivotItem.Header內容有:

yourPivotItem.Header = new TextPOCO { Test1 = "newValue1", Test2 = "newValue2"}; 
+0

謝謝你:)你知道嗎,如果有一個屬性爲我的pivotitem,代表c意圖?如果我使用pivotitem.Content = new TextPOCO,它會覆蓋數據模板,我想。 –

+0

「內容」究竟是什麼意思:可視化樹或綁定數據? – AirL

+0

我找到了解決我的問題的方法:)我的意思是來自我的pivotitem的綁定數據。 –