Создайте настроенный заголовок PivotItem во время выполнения, используя C # - PullRequest
4 голосов
/ 18 ноября 2011

Я пытаюсь динамически добавить PivotItem в Pivot во время загрузки. Мне нужно немного экранного состояния, и стандартный шрифт заголовка элемента сводки был слишком большим для меня. Некоторый поиск по форуму привел к этому решению:

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

Это решение работает нормально, если я определил его в самом XAML сводного элемента, но как я могу это сделать в коде C #?

Ответы [ 2 ]

4 голосов
/ 18 ноября 2011

Вам просто нужно создать 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);
    }
0 голосов
/ 19 ноября 2011

Следующий код устанавливает FontSize всех существующих PivotElement с внутри 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"]);
}

И если вам интересно, откуда взялась *1.33 в расчете высоты заголовка - это было вдохновлено этим сообщением в блоге .

...