Create custom PivotItem header at runtime using C #

I am trying to add PivotItem to Pivot dynamically at boot time. I needed some screen property, and the standard title font of the title element was too big for me. Some search in the forum led to this solution:

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

This solution works fine if I defined it inside Pythotitem XAML itself, but how can I do this in C # code?

+4
source share
2 answers

You just need to create a Pivot object and some PivotItems objects, and then add those PivotItems to the Pivot . Finally, add this Pivot to your LayoutRoot , which is most likely a Grid .

Something like that,

  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); } 
+4
source

The following code sets the FontSize all existing PivotElement inside a Pivot to a given value. It also (roughly) adjusts the height of the header area.

The code plunges into the Pivot child elements and looks for the right elements to change: PivotHeaderItem (one header) and PivotHeadersControl (containing all headers).

 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 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"]); } 

And in case you are wondering where *1.33 comes from in calculating the height of the title, he was inspired by this blog post .

0
source

Source: https://habr.com/ru/post/1381905/


All Articles