我需要更改内容演示者的鼠标悬停/指针的颜色,但我的风格不起作用。
有人帮助我吗?
由于
<Style x:Key="Test" TargetType="ContentPresenter">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="PointerOver">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ColorTest}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ColorTest}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Style>
答案 0 :(得分:0)
我不相信这是可能的。视觉状态由特定控件发布,ContentPresenter
表示可以是任何类型的控件或任意复杂的元素树。
您可以使用Control Styles and Templates中的小节来了解哪些视觉状态对每个控件都有效,但正如您所看到的那些特定于所讨论的控件,并非始终支持每个状态。
您的样式可以修改为使用触发器,例如<Trigger Property="IsMouseOver" Value="True">
,但是您只能为ContentPresenter
的属性提供setter,而Foreground
不是其中之一。
<强>更新强>
但是,由于TextBlock.Foreground
是附加属性,因此您可以使Trigger解决方案在您的特定示例中工作,并包括复杂的控件内容。请注意,这对所有酒店都不起作用。
<Grid>
<Grid.Resources>
<ControlTemplate TargetType="Button" x:Key="ButtonControlTemplate">
<ContentPresenter />
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="TextBlock.Foreground" Value="Red" />
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="TextBlock.Foreground" Value="Blue" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Grid.Resources>
<Button Template="{StaticResource ButtonControlTemplate}" Content="Test" />
</Grid>