wpf - 路径上的按钮 IsMouseOver 触发器不起作用

标签 wpf xaml

我有一个带有包含 Path 元素的自定义内容的按钮。 Path 的 Fill 属性与按钮的 IsMouseOver 属性关联。

任何人都可以指出代码有什么问题以及触发器没有触发的原因。

下面是完整的示例代码-

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button Grid.Row="0"
                Grid.Column="8"
                VerticalAlignment="Center"
                HorizontalAlignment="Center"
                HorizontalContentAlignment="Center"
                VerticalContentAlignment="Center">
            <Path Width="10"
                Height="10"                      
                Margin="0,0,0,0"
                Fill="Orange"
                Stretch="Uniform"
                RenderTransformOrigin="0.5,0.5"
                Data="M7.1999998,0L16,8.7999997 24.799999,0 32,7.1999998 23.2,16 32,24.799999 24.799999,32 16,23.2 7.1999998,32 0,24.799999 8.7999997,16 0,7.1999998z">
                <Path.RenderTransform>
                    <TransformGroup>
                        <TransformGroup.Children>
                            <RotateTransform Angle="0" />
                            <ScaleTransform ScaleX="1" ScaleY="1" />
                        </TransformGroup.Children>
                    </TransformGroup>
                </Path.RenderTransform>
                <Path.Style>
                    <Style TargetType="{x:Type Path}">
                        <Style.Triggers>
                        <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Button}}" Value="True" >
                                <Setter Property="Fill" Value="#FF5733" ></Setter>
                            </DataTrigger>
                        <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Button}}" Value="False" >
                                <Setter Property="Fill" Value="Orange" ></Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Path.Style>
            </Path>
        </Button>
    </Grid>
</Window>

最佳答案

只需从 Path 中删除属性 Fill 并仅在 Style 中设置 Orange 值。 您可以只使用一个并通过 Setter 直接在 Style 中设置 False 值,而不是实现两个 Trigger。如果 Trigger 不匹配,将设置此默认值。

<Button Grid.Row="0"
        Grid.Column="8"
        VerticalAlignment="Center"
        HorizontalAlignment="Center"
        HorizontalContentAlignment="Center"
        VerticalContentAlignment="Center">
    <Path Width="10"
          Height="10"                      
          Margin="0,0,0,0"
          Stretch="Uniform"
          RenderTransformOrigin="0.5,0.5"
          Data="M7.1999998,0L16,8.7999997 24.799999,0 32,7.1999998 23.2,16 32,24.799999 24.799999,32 16,23.2 7.1999998,32 0,24.799999 8.7999997,16 0,7.1999998z">
        <Path.RenderTransform>
            <TransformGroup>
                <TransformGroup.Children>
                    <RotateTransform Angle="0" />
                        <ScaleTransform ScaleX="1" ScaleY="1" />
                </TransformGroup.Children>
            </TransformGroup>
        </Path.RenderTransform>
        <Path.Style>
            <Style TargetType="{x:Type Path}">
                <Setter Property="Fill" Value="Orange" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Button}}" Value="True" >
                        <Setter Property="Fill" Value="#FF5733" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Path.Style>
    </Path>
</Button>

关于wpf - 路径上的按钮 IsMouseOver 触发器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41032705/

相关文章:

wpf - 自定义依赖属性仅触发一次

c# - 如何在 C# .Net 4.6 WPF 应用程序中隐藏 ConnectionString

c# - 我如何使用 DesignData 来帮助开发 Metro 应用程序?

c# - 在 WPF 中,如何绑定(bind)到 ViewModel 并将各种 XAML 元素绑定(bind)到 ViewModel 的方法?

c# - WPF DataBinding 未使用 INotifyPropertyChanged 进行更新

c# - 默认的 WPF 控件模板在哪里?

c# - 使用 MVVM 管理可取消的部分更新

c# - System.Windows.Control.RichTextBox 中的错误

c# - 如何让 WPF ContentControl 内容拉伸(stretch)?

wpf - 创建半透明模糊背景 WPF