Windows 10透视项目文本

时间:2016-01-13 18:38:38

标签: c# xaml uwp windows-10-universal

我想在选择标题时更改透视项目标题文字的默认文字样式(前景色,字体粗细等)。

例如,如果我有以下内容:

<Pivot>
    <PivotItem Header="One"></PivotItem>
    <PivotItem Header="Two"></PivotItem>
</Pivot>

我希望所选的枢轴项目在选中时加粗和/或更改前景色(或者可能将文本放在边框中等)。我不想更改未选择项的默认样式。

感谢名单,

2 个答案:

答案 0 :(得分:1)

  

XAML框架提供了许多自定义应用外观的方法。样式允许您设置控件属性并重复使用这些设置,以在多个控件之间实现一致的外观。当您想要自定义控件的视觉结构和视觉行为时,可以创建控件模板。

您不需要将pivot标题的文本放在边框中,编辑PivotHeaderItem <Page x:Class="..." xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Page.Resources> <Style TargetType="PivotHeaderItem"> ... </Style> </Page.Resources> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> ... </Grid> </Page> 将是一个不错的选择,您可以将此样式添加到{{页面的3}}。

  

资源通常是您希望多次使用的某些对象的定义。

有一个默认的Style,您可以复制它并将其添加到您的页面资源中,如下所示:

<VisualState x:Name="Selected">

现在,如果您想在选择项目时更改标题中文本的前景,可以像这样编辑<VisualState x:Name="Selected"> <Storyboard> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground"> <DiscreteObjectKeyFrame KeyTime="0" Value="Red" /> </ObjectAnimationUsingKeyFrames> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Grid" Storyboard.TargetProperty="Background"> <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightTransparentBrush}" /> </ObjectAnimationUsingKeyFrames> </Storyboard> </VisualState>

VisualState

如果您想将标题文字更改为粗体,可以在<VisualState x:Name="Selected"> <Storyboard> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="FontWeight"> <DiscreteObjectKeyFrame KeyTime="0" Value="Bold" /> </ObjectAnimationUsingKeyFrames> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Grid" Storyboard.TargetProperty="Background"> <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightTransparentBrush}" /> </ObjectAnimationUsingKeyFrames> </Storyboard> </VisualState> 之上进行修改,如下所示:

VisualState

如果您只想在选择项目时更改样式,则可以将其他<?xml version="1.0" encoding="utf-8"?> <Document> <Header> <NoInvoices>3</NoInvoices> <ExportDate>11-20-2015</ExportDate> </Header> <Invoices> <Type>CN</Type> <Customer>Juan</Customer> <CustAddress>New Bilibid</CustAddress> <InvNumber>01234</InvNumber> <Items> <Name>Sugar</Name> <Qty>2</Qty> <Price>5</Price> <Amount>10</Amount> <OrigInv>01235</OrigInv> </Items> </Invoices> <Invoices> <Type>SI</Type> <Customer>Juan</Customer> <CustAddress>New Bilibid</CustAddress> <InvNumber>01235</InvNumber> <Items> <Name>Coffee</Name> <Qty>5</Qty> <Price>25</Price> <Amount>125</Amount> </Items> <Items> <Name>Sugar</Name> <Qty>5</Qty> <Price>5</Price> <Amount>25</Amount> </Items> </Invoices> <Invoices> <Type>SI</Type> <Customer>Julianna</Customer> <CustAddress>New Wares</CustAddress> <InvNumber>01236</InvNumber> <Items> <Name>Margarine</Name> <Qty>1</Qty> <Price>50</Price> <Amount>50</Amount> </Items> <Items> <Name>Butter</Name> <Qty>10</Qty> <Price>10</Price> <Amount>100</Amount> </Items> </Invoices> </Document> 保留为defalut。

答案 1 :(得分:0)

在XAML中

 <Pivot SelectionChanged="Pivot_SelectionChanged">
        <PivotItem>
            <PivotItem.Header>
                <TextBlock Text="One"></TextBlock>
            </PivotItem.Header>
        </PivotItem>

        <PivotItem>
            <PivotItem.Header>
                <TextBlock Text="Two"></TextBlock>
            </PivotItem.Header>
        </PivotItem>
 </Pivot>

在C#

 private void Pivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        Pivot pivot = sender as Pivot;
        PivotItem pivotItemSelected = ((PivotItem) ((Pivot) sender).SelectedItem);


        for (int i = 0; i < pivot.Items.Count; i++)
        {
            PivotItem pivotItem = pivot.Items[i] as PivotItem;
            TextBlock tb = pivotItem.Header as TextBlock;
            if (pivotItem == pivotItemSelected)
            {
                //Style 
                tb.Foreground = new SolidColorBrush(Colors.Blue);
            }
            else
            {
                tb.Foreground = new SolidColorBrush(Colors.Black);
            }
        }
    }

我希望这可以帮到你