【问题标题】:MouseOver ContentPresenter XAML StyleMouseOver ContentPresenter XAML 样式
【发布时间】:2015-10-23 00:19:07
【问题描述】:

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

有人帮帮我吗?

谢谢

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

【问题讨论】:

    标签: xaml styles mouseover markup


    【解决方案1】:

    我不相信这是可能的。视觉状态由特定控件发布,ContentPresenter 表示可以是任何类型的控件或任意复杂的元素树。

    您可以使用Control Styles and Templates 中的小节来了解哪些视觉状态对每个控件有效,但正如您所见,这些是特定于相关控件的,并非总是支持每个状态。

    您的样式可以修改为使用触发器,例如&lt;Trigger Property="IsMouseOver" Value="True"&gt;,但是您只能为ContentPresenter 的属性提供设置器,而Foreground 不是其中之一。

    更新

    但是,由于TextBlock.Foreground 是附加属性,您可以使触发器解决方案在您的特定示例中工作,并包括复杂的控制内容。但请注意,这不适用于所有属性。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 2013-12-05
      • 1970-01-01
      • 2016-09-22
      相关资源
      最近更新 更多