如何在C#代码而不是XAML中删除WPF默认动画

如何在C#代码而不是XAML中删除WPF默认动画,c#,wpf,button,C#,Wpf,Button,我正在动态创建以图像为背景的按钮,问题是鼠标悬停时默认的WPF按钮动画使我的按钮变形并隐藏图像 是否有任何方法可以为这些按钮创建自己的按钮样式,而无需创建自定义按钮类,并使用类似MyButton.property=something的东西 在C#代码中不是XAML,因为我正在动态创建按钮。您可以设置按钮的ControlTemplate。由于您不希望在XAML中执行此操作,因此有一种方法可以在代码隐藏中执行: string buttonTemplate = "<ControlTemp

我正在动态创建以图像为背景的按钮,问题是鼠标悬停时默认的WPF按钮动画使我的按钮变形并隐藏图像

是否有任何方法可以为这些按钮创建自己的按钮样式,而无需创建自定义按钮类,并使用类似MyButton.property=something的东西


在C#代码中不是XAML,因为我正在动态创建按钮。

您可以设置按钮的ControlTemplate。由于您不希望在XAML中执行此操作,因此有一种方法可以在代码隐藏中执行:

string buttonTemplate =
    "<ControlTemplate TargetType=\"Button\">" +
        "<Image Source=\"myImage.gif\" />" +              
    "</ControlTemplate>";
myButton.Template = (ControlTemplate)XamlReader.Parse(template);
字符串按钮模板=
"" +
"" +              
"";
myButton.Template=(ControlTemplate)XamlReader.Parse(Template);

这只是一个以图像为内容的基本按钮。如果您想在诸如鼠标之类的操作上拥有自定义动画,您可以使用VisualStateManager将XAML添加到代码隐藏字符串中来解决这一问题。

您可以通过在参考资料中为按钮创建模板来实现这一点

这是一个样本

XAML代码

<UserControl.Resources>
        <ControlTemplate x:Key="buttonTemplate">
            <Image Name="btnImage" Source="C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"></Image>
        </ControlTemplate>
    </UserControl.Resources>   
    <Grid Name="layoutRoot">
    </Grid>
</UserControl>
如果要从视图模型添加按钮,可以从应用程序资源(通过将资源放入app.xaml文件)获取按钮模板

Button button = new Button();
            ControlTemplate ct = this.Resources["buttonTemplate"] as ControlTemplate;
            Image img = ct.LoadContent() as Image;
            img.Source = new BitmapImage(new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg",UriKind.RelativeOrAbsolute));
            button.Template = ct;
            button.Height = 200;
            button.Width = 200;
            layoutRoot.Children.Add(button);