关于在WPF开发过程中,在ToolBar面板上的按钮,点击事件Click和MouseDown和Bindding命令失效问题。
最近在开发软件中,遇到一个奇怪问题,在ToolBar上面放置的button,正常显示情况下按钮工作正常,绑定的命令能触发。但如果处于overflowpanel上后,绑定的command就不能再执行了。见图:

后经过查找,终于发现,问题出在Button的Style定义上。如果在Style中定义中自定义了Template,同时使用了触发器,则命令绑定会失效。见下面代码:如果把其中注释掉的<!--<Trigger Property="IsPressed" Value="true">.....-->去掉注释,则命令不能执行,
<!--浮动工具栏按钮样式-->
<Style x:Key="ToolbarBtn_Style" TargetType ="{x:Type Button}">
<Setter Property="Padding" Value="0"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="BorderBrush" Value="{x:Null}"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Margin" Value="2"/>
<Setter Property="Foreground" Value="Gold"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="Border" CornerRadius="2">
<ContentPresenter Margin="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" RecognizesAccessKey="True"/>
</Border>
<ControlTemplate.Triggers>
<!--<Trigger Property="IsPressed" Value="true">
<Setter TargetName="Border" Property="Background" Value="#D89F0F" />
<Setter TargetName="Border" Property="BorderBrush" Value="#888888" />
<Setter TargetName="Border" Property="BorderThickness" Value="1" />
</Trigger>-->
<Trigger Property="IsEnabled" Value="false">
<Setter TargetName="Border" Property="BorderThickness" Value="2" />
<Setter TargetName="Border" Property="Background" Value="#7FEEEEEE" />
<Setter TargetName="Border" Property="BorderBrush" Value="#7F222222" />
<Setter Property="Foreground" Value="#777777"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
不知道有没有人说说为什么会这样。从理论上认识一下。
浙公网安备 33010602011771号