我想在选择标题时更改透视项目标题文字的默认文字样式(前景色,字体粗细等)。
例如,如果我有以下内容:
<Pivot>
<PivotItem Header="One"></PivotItem>
<PivotItem Header="Two"></PivotItem>
</Pivot>
我希望所选的枢轴项目在选中时加粗和/或更改前景色(或者可能将文本放在边框中等)。我不想更改未选择项的默认样式。
感谢名单,
答案 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)
<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>
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);
}
}
}
我希望这可以帮到你