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);

在两个或更多项目上,它会引发异常:“值不在预期范围内”。

我需要另一种方法来做到这一点。

谢谢,鲁文

4

1 回答 1

0

如果要(重新)定义Pivot标题的外观,则必须使用DataTemplate类型的Pivot.HeaderTemplate属性(这将影响其所有子级)。PivotItems

不能使用PivotItem.Header属性来完成,该属性不是模板,而是包含要绑定到DataTemplate每个PivotItem.

因此,理论上,您必须在代码(及其所有内容)中创建一个DataTemplatePivot.HeaderTemplate ,然后将其分配给您的属性。

一种解决方案可能是本文中解释的以下解决方案:

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"};
于 2013-10-30T18:19:04.770 回答