【问题标题】:Buttons Events In Style In WPFWPF中样式的按钮事件
【发布时间】:2013-07-01 20:53:31
【问题描述】:

我尝试为按钮设置样式 三个事件: onmouseenter - onmouseleave - onclick

在这些事件上上传不同的图像...我需要将这种样式添加到多个按钮上。

但不知道如何在风格上做到这一点。

请注意,我需要将此代码放入资源字典并将其包含在所有应用程序中以添加到所有按钮。

【问题讨论】:

    标签: wpf button styles


    【解决方案1】:

    重写 Button 的 ControlTemplate 并使用 VisualStates 来处理不同的状态:

    <Style TargetType="{x:Type Button}" x:Key="{x:Type Button}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Grid Background="Transparent">
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="Normal"/>
                                    <VisualState x:Name="Pressed"/>
                                    <VisualState x:Name="MouseOver">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MouseOverImage"
                                                                       Storyboard.TargetProperty="Visibility">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Collapsed}"/>
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                            <Border x:Name="ButtonBackground"  Margin="0" >
                                <Image x:Name="NormalImage" Source="Resources\Normal.png"/>
                                <Image x:Name="MouseOverImage" Source="Resources\MouseOver.png" Visibility="Collapsed"/>
                                <Image x:Name="PressedImage" Source="Resources\Pressed.png" Visibility="Collapsed"/>
                            </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    

    【讨论】:

    • 我收到了这个错误。对象“边框”已经有一个孩子,不能添加“图像”。 'Border' 只能接受一个孩子。
    • 您可以在边框和图像之间添加网格。
    【解决方案2】:

    试试这个:

    <Style TargetType="{x:Type Button}">
            <Style.Triggers>
                <Trigger Property="IsPressed" Value="True">
                    <Setter TargetName="viewImage" Property="Source" Value="/Images/noImage.png" />
                </Trigger>
                <Trigger Property="OnMouseEnter" Value="True">
                    <Setter TargetName="viewImage" Property="Source" Value="/Images/noImage.png" />
                </Trigger>
    
                <Trigger Property="OnMouseLeave" Value="True">
                    <Setter TargetName="viewImage" Property="Source" Value="/Images/noImage.png" />
                </Trigger>
            </Style.Triggers>
        </Style>
    

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      相关资源
      最近更新 更多