MouseOver ContentPresenter XAML样式

时间:2015-07-31 10:38:19

标签: xaml styles mouseover markup

我需要更改内容演示者的鼠标悬停/指针的颜色,但我的风格不起作用。

有人帮助我吗?

由于

<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>

1 个答案:

答案 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>