相关疑难解决方法(0)

有没有办法为样式属性使用样式设置器?

编辑: 在原始问题中,我对如何设置器工作做了一些错误的假设,所以我修改它以希望更准确和有用.

我试图让一些菜单项更有趣,如果鼠标不在项目上方,图标显示为半透明.如果鼠标进入,则应该将图标设置为动画以使其完全可见.动画工作,Storyboard.TargetProperty允许直接访问图标的不透明属性:

<Style x:Key="MenuItemMouseOverStyle" TargetType="MenuItem">
    <Style.Triggers>
        <EventTrigger RoutedEvent="MouseEnter">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Icon.Opacity">
                        <EasingDoubleKeyFrame KeyTime="0" Value="0.5"/>
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/>
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
        <EventTrigger RoutedEvent="MouseLeave">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Icon.Opacity">
                        <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
                        <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.5"/>
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用setter作为初始图标不透明度,代码将无法编译:

<Setter Property="Icon.Opacity" Value="0.5"/>
Run Code Online (Sandbox Code Playgroud)

编辑: Setter不按照我尝试使用它们的方式工作,你无法访问属性的属性(参见答案)你唯一能做的就是如果尚未设置样式的目标类型,则指定目标类,如下样式应该是等价的:

<Style x:Key="Style1" TargetType="Image">
    <Setter Property="Opacity" Value="0.5"/>
</Style>
<Style x:Key="Style2">
    <Setter Property="Image.Opacity" Value="0.5"/>
</Style>
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,是否有办法让它以某种方式与setter一起工作.

(我目前的解决方案是一个单关键帧故事板,由Loaded事件触发,效果很好)

wpf xaml controls styles

5
推荐指数
1
解决办法
3661
查看次数

标签 统计

controls ×1

styles ×1

wpf ×1

xaml ×1