在xaml中创建图像样式

时间:2010-08-27 17:30:05

标签: coding-style expression-blend

我不知道为什么我这么做有这么多麻烦,这应该不难,但我必须是混合无能的。有人可以给我一个图像样式的xaml,其中图像的不透明度为60%,鼠标悬停时为100,鼠标输出为60%,onclick发光为0.2秒。

或者告诉我怎么做混合?

谢谢

解决方案结果很简单:

<Style x:Key="FadeImageButton" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid x:Name="grid" Width="16" Height="16">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualStateGroup.Transitions>
                                <VisualTransition GeneratedDuration="0:0:0.2"/>
                                <VisualTransition GeneratedDuration="0:0:0.2" To="Normal"/>
                                <VisualTransition GeneratedDuration="0:0:0.2" To="MouseOver"/>
                            </VisualStateGroup.Transitions>
                            <VisualState x:Name="Normal">
                                <Storyboard>
                                    <DoubleAnimation Duration="0" To="0.6" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="grid" d:IsOptimized="True"/>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="MouseOver">
                                <Storyboard>
                                    <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="grid" d:IsOptimized="True"/>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Pressed"/>
                            <VisualState x:Name="Disabled"/>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="FocusStates">
                            <VisualState x:Name="Focused"/>
                            <VisualState x:Name="Unfocused"/>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

1 个答案:

答案 0 :(得分:2)

你当然不会无能为力。图像没有状态,所以风格不是答案。

您可以为图像创建的唯一样式是针对一种固定状态,因此您可以添加60%的不透明度,但不会增加其他内容。

您的选择是:

  • 创建EnterImage和LeaveImage 使用ControlStoryboardAction行为播放的故事板(在MouseEnter和MouseLeave事件上)。
  • 创建自定义行为并将其附加到图像。
  • 将图像放在另一个具有状态(可能是按钮)的控件中
  • 将图像放在具有图像属性的用户控件中
  • 创建自定义控件

最简单的是选项1,但它需要为每个图像附加几个属性,以便更多的拖动和点击来创作它们。

如果您告诉我们您更喜欢哪个选项,我可以发布一个示例。