C# DataTemplate中按钮的鼠标悬停效果
我使用C# DataTemplate中按钮的鼠标悬停效果,c#,wpf,C#,Wpf,我使用DataTemplate以自定义视图(图像、文本等)显示一些按钮。以下是一个简化的示例: <DataTemplate DataType="{x:Type viewModel:ActionItem}"> <Button Background="SlateGray" Command="{Binding Command}"> <Button.Style> <Style TargetType="{x:Typ
DataTemplate
以自定义视图(图像、文本等)显示一些按钮。以下是一个简化的示例:
<DataTemplate DataType="{x:Type viewModel:ActionItem}">
<Button Background="SlateGray" Command="{Binding Command}">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Green"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}">
<ContentPresenter />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="DarkGoldenrod"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
<TextBlock Text="{Binding Name}" />
</Button>
</DataTemplate>
为什么鼠标悬停效果根本不起作用?因为
Background=“SlateGray”
会覆盖样式中可以触发的任何内容。删除该位,它就会工作。请在模板级别设置触发器,如
<DataTemplate DataType="{x:Type viewModel:ActionItem}">
<Button Background="SlateGray" Command="{Binding Command}">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Green"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}">
<ContentPresenter />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="DarkGoldenrod"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
<TextBlock Text="{Binding Name}" />
</Button>
</DataTemplate>
当触发器触发时,bcos不应出现这种情况,它会用您在trigger@Pamparanpa它不是以控制方式设置的,DP是直接设置的-如果你不相信我,请自己测试。顺便说一句:你的理由不一样。@Manfred:你是对的,现在觉得自己很傻。。。谢谢您的帮助。@S.Akbari:相关答案告诉您使用控制模板,我已经这样做了。