使用C#在运行时创建自定义的PivotItem头

时间:2011-11-18 13:45:26

标签: c# xaml windows-phone-7 pivotitem

我正在尝试在加载时动态地将PivotItem添加到Pivot。我需要一些屏幕空间,标准的枢轴项目标题字体对我来说太大了。一些论坛搜索导致了这个解决方案:

<controls:PivotItem>
   <controls:PivotItem.Header>
      <TextBlock FontSize="{StaticResource PhoneFontSizeLarge} Text="MyHeaderText"/>
   </controls:PivotItem.Header>
</controls:PivotItem>

如果我在pivotitem XAML本身中定义它,这个解决方案可以正常工作,但我怎么能用C#代码做到这一点?

2 个答案:

答案 0 :(得分:4)

您只需创建一个Pivot对象和一些PivotItems个对象,然后将这些PivotItems添加到Pivot。最后将此Pivot添加到您的LayoutRoot,这可能是Grid

像这样,

    void PivotPage2_Loaded(object sender, RoutedEventArgs e)
    {
        var pivot = new Pivot();
        var textBlock = new TextBlock { Text = "header 1", FontSize = 32 };
        var pivotItem1 = new PivotItem { Header = textBlock };

        var textBlock2 = new TextBlock { Text = "header 2", FontSize = 32 };
        var pivotItem2 = new PivotItem { Header = textBlock2 };

        pivot.Items.Add(pivotItem1);
        pivot.Items.Add(pivotItem2);

        this.LayoutRoot.Children.Add(pivot);
    }

答案 1 :(得分:0)

以下代码将FontSize内所有现有PivotElement的{​​{1}}设置为给定值。它(大致)也会调整标题区域的高度。

代码潜入Pivot的孩子,并搜索要修改的正确项目:Pivot(单个标题)和PivotHeaderItem(包含所有标题)。

PivotHeadersControl

如果您想知道标题高度计算中的using Microsoft.Phone.Controls.Primitives; delegate void ChildProc(DependencyObject o); // applies the delegate proc to all children of a given type private void DoForChildrenRecursively(DependencyObject o, Type typeFilter, ChildProc proc) { // check that we got a child of right type if (o.GetType() == typeFilter) { proc(o); } // recursion: dive one level deeper into the child hierarchy for (int i = 0; i < VisualTreeHelper.GetChildrenCount(o); i++) { DoForChildrenRecursively(VisualTreeHelper.GetChild(o, i), typeFilter, proc); } } // applies the given font size to the pivot's header items and adjusts the height of the header area private void AdjustPivotHeaderFontSize(Pivot pivot, double fontSize) { double lastFontSize = fontSize; DoForChildrenRecursively(pivot, typeof(PivotHeaderItem), (o) => { lastFontSize = ((PivotHeaderItem)o).FontSize; ((PivotHeaderItem)o).FontSize = fontSize; }); // adjust the header control height according to font size change DoForChildrenRecursively(pivot, typeof(PivotHeadersControl), (o) => { ((PivotHeadersControl)o).Height -= (lastFontSize - fontSize) * 1.33; }); } private void button1_Click(object sender, RoutedEventArgs e) { // make header items having FontSize == PhoneFontSizeLarge AdjustPivotHeaderFontSize(pivot, (double)Resources["PhoneFontSizeLarge"]); } 来自何处 - 它的灵感来自this blog post