In WPF: how to disable the animation when the button after be pressed?
上面的这个问题解决了这个问题,但它改变了整个模板,是否有更优雅的解决方案,例如:
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="StoryBoard" Value="Disable" />
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="StoryBoard" Value="Disable" />
</Trigger>
</Style.Triggers>
答案 0 :(得分:3)
not the storyboard
为MouseOver and Pressed events
制作动画,而border brush for button is updated
则为control tempalte triggers
。如果您想逃脱这些触发器unfortunately you have to override the template to remove those triggers from the default template
。
可以找到默认模板here。您可以在那里看到负责更新边框画笔的触发器。
只需从默认模板中删除该触发器即可开始使用。如果您希望将该样式应用于应用程序中的所有按钮,请将样式放在App资源中。
<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="Border"
BorderThickness="1"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}">
<ContentPresenter Margin="2"
HorizontalAlignment="Center"
VerticalAlignment="Center"
RecognizesAccessKey="True"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
除此之外,如果您希望为按钮提供工具栏按钮的外观和感觉,您可以通过简单地应用工具栏按钮样式来实现这一点 -
<Button Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"/>
答案 1 :(得分:2)
您也可以使用PreviewMouseLeftButtonDown的处理程序代替ButtonClick
函数将相同并命令 e.Handled = true; 确保动画无法启动
private void button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
//some your code
e.Handled = true;
}
&#13;