Wpf 为什么此自定义控件中的这些触发器/事件从控件继承而不是从按钮继承时起作用?
当此自定义控件从控件继承时,这些触发器会像预期的那样工作,但当它从按钮继承时,这些触发器不会像预期的那样工作。当它从按钮继承时,第二个触发器永远不会被触发。此外,从按钮继承时,如果鼠标按钮保持按下状态,即使光标移出控件,控件仍将保持悬停状态(即满足第一个触发器) Generic.xaml中的代码段:Wpf 为什么此自定义控件中的这些触发器/事件从控件继承而不是从按钮继承时起作用?,wpf,xaml,events,triggers,Wpf,Xaml,Events,Triggers,当此自定义控件从控件继承时,这些触发器会像预期的那样工作,但当它从按钮继承时,这些触发器不会像预期的那样工作。当它从按钮继承时,第二个触发器永远不会被触发。此外,从按钮继承时,如果鼠标按钮保持按下状态,即使光标移出控件,控件仍将保持悬停状态(即满足第一个触发器) Generic.xaml中的代码段: <Style TargetType="{x:Type ui:SquareButton}"> <Setter Property="Background" Value="{St
<Style TargetType="{x:Type ui:SquareButton}">
<Setter Property="Background" Value="{StaticResource BackgroundColorBrush}" />
<Setter Property="BorderBrush" Value="{StaticResource MainColorBrush}" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="CornerRadius" Value="0,2,2,0" />
<Setter Property="Padding" Value="2" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ui:SquareButton}">
<Border x:Name="PART_Border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" HorizontalAlignment="Center" CornerRadius="{TemplateBinding CornerRadius}">
<Grid Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=AHeight}" Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height}">
<ui:ColorableImage x:Name="PART_Image" Source="calendar-black.png" Color="Black" Stretch="None"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource SecondaryColorBrush}" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="IsMouseLeftButtonDown" Value="True" />
</MultiTrigger.Conditions>
<Setter Property="Background" Value="{StaticResource MainColorBrush}" />
<Setter TargetName="PART_Image" Property="Color" Value="{StaticResource BackgroundColor}" />
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
您可以在iPressed属性上使用触发器,而不是使用multitrigger:
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="{StaticResource MainColorBrush}" />
<Setter TargetName="PART_Image" Property="Color" Value="{StaticResource BackgroundColor}" />
</Trigger>
您是否尝试在iPressed属性上使用触发器而不是multitrigger?看起来很有效。不幸的是,我的按钮跨越了容器的整个宽度。。。但这是另一个问题。把它贴出来作为答案,我会接受的是的,一个按钮总是占据所有可用的空间。您必须更改垂直对齐和水平对齐属性才能更改。是的,我刚刚计算出来。我也用一个普通的按钮测试了它,看它的行为是否与我的控件一致,确实如此,所以它只是一个WPF的东西。谢谢
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="{StaticResource MainColorBrush}" />
<Setter TargetName="PART_Image" Property="Color" Value="{StaticResource BackgroundColor}" />
</Trigger>