Xaml 是否有任何方法可以访问VisualStateManager中ContentPresenter的子级并更改其属性?
在我的windows应用商店应用程序中,我尝试创建一个按钮样式,如导航后退按钮。所以我创建了一个ButtonStyle,它包含一个路径(一个圆)和一个ContentPresenter App.xaml的内部资源字典:Xaml 是否有任何方法可以访问VisualStateManager中ContentPresenter的子级并更改其属性?,xaml,windows-store-apps,visualstatemanager,Xaml,Windows Store Apps,Visualstatemanager,在我的windows应用商店应用程序中,我尝试创建一个按钮样式,如导航后退按钮。所以我创建了一个ButtonStyle,它包含一个路径(一个圆)和一个ContentPresenter App.xaml的内部资源字典: <Style x:Key="CnSCircleButtonStyle" TargetType="Button"> <Setter Property="Template"> <
<Style x:Key="CnSCircleButtonStyle" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="PointerOver">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Circle" Storyboard.TargetProperty="Fill">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonPointerOverBackgroundThemeBrush}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Circle" Storyboard.TargetProperty="Fill">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource AppBarItemForegroundThemeBrush}" />
<!-- Can I access the Fill property of the Path inside Button and set it to Black? -->
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border x:Name="Border"
Margin="0"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Path x:Name="Circle"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Fill="Transparent"
Stroke="White"
StrokeThickness="2"
UseLayoutRounding="False">
<Path.Data>
<EllipseGeometry Center="20, 20"
RadiusX="20"
RadiusY="20" />
</Path.Data>
</Path>
<ContentPresenter x:Name="ContentPresenter"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
AutomationProperties.AccessibilityView="Raw"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
ContentTransitions="{TemplateBinding ContentTransitions}" />
</Grid>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Button Width="45"
Height="45"
Margin="0 0 0 20"
HorizontalAlignment="Right"
VerticalAlignment="Top"
Background="Transparent"
BorderThickness="0"
Command="{Binding LoginCommand}"
Style="{StaticResource CnSCircleButtonStyle}">
<Grid Width="44" Height="44">
<Path Name="Test"
Width="20"
Height="20"
Margin="0 0 23 5"
Data="{StaticResource tickIcon}"
Fill="White"
Stretch="Uniform" />
</Grid>
</Button>
页面内部:
<Style x:Key="CnSCircleButtonStyle" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="PointerOver">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Circle" Storyboard.TargetProperty="Fill">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonPointerOverBackgroundThemeBrush}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Circle" Storyboard.TargetProperty="Fill">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource AppBarItemForegroundThemeBrush}" />
<!-- Can I access the Fill property of the Path inside Button and set it to Black? -->
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border x:Name="Border"
Margin="0"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Path x:Name="Circle"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Fill="Transparent"
Stroke="White"
StrokeThickness="2"
UseLayoutRounding="False">
<Path.Data>
<EllipseGeometry Center="20, 20"
RadiusX="20"
RadiusY="20" />
</Path.Data>
</Path>
<ContentPresenter x:Name="ContentPresenter"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
AutomationProperties.AccessibilityView="Raw"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
ContentTransitions="{TemplateBinding ContentTransitions}" />
</Grid>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Button Width="45"
Height="45"
Margin="0 0 0 20"
HorizontalAlignment="Right"
VerticalAlignment="Top"
Background="Transparent"
BorderThickness="0"
Command="{Binding LoginCommand}"
Style="{StaticResource CnSCircleButtonStyle}">
<Grid Width="44" Height="44">
<Path Name="Test"
Width="20"
Height="20"
Margin="0 0 23 5"
Data="{StaticResource tickIcon}"
Fill="White"
Stretch="Uniform" />
</Grid>
</Button>
这样,我可以很容易地用白色填充圆形路径。但我也希望按钮内的路径用黑色填充。因此,我的问题是:当按下VisualState搜索ContentPresenter时,xaml中是否有任何方法可以将其填充属性设置为黑色?您是否尝试过
AppBarButton
[?您可以设置Icon=“Back”谢谢……这正是我需要的。如果您想设置路径,可以使用PathIcon属性。