禁用 WPF 按钮上的默认动画

问题描述 投票:0回答:2

在WPF中:如何禁用按下按钮后的动画?

上面这个解决了问题,但是它改变了整个模板,有没有更优雅的解决方案,例如这样的:

<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>
c# wpf
2个回答
4
投票

不是故事板对

MouseOver
Pressed
事件进行动画处理,而是按钮的
BorderBrush
通过
ControlTemplate
触发器进行更新。如果您想摆脱这些触发器,不幸的是您必须覆盖模板以从默认模板中删除这些触发器。

默认模板可以在这里找到。您可以在那里看到负责更新边框画笔的触发器。

只需从默认模板中删除该触发器即可。如果您希望将该样式应用于应用程序中的所有按钮,请将样式放入应用程序资源中。

<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}}"/>        

4
投票

您还可以使用 PreviewMouseLeftButtonDown 的处理程序代替 ButtonClick

功能与命令相同 e.Handled = true;确保动画不会启动

 private void button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {

            //some your code
            e.Handled = true;
        }

© www.soinside.com 2019 - 2024. All rights reserved.