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

本文关键字:动画 默认 XAML WPF 代码 删除 | 更新日期: 2023-09-27 18:02:27

我正在动态创建具有图像作为背景的按钮,问题是默认的WPF按钮动画在鼠标上变形我的按钮并隐藏图像。

是否有任何方法,我可以使我自己的按钮样式这些按钮不创建自定义按钮类,并使用像mybutton。Property = something;

c#代码中的

而不是XAML因为我是动态创建按钮的

如何在c#代码中删除WPF的默认动画而不是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>

后面的代码:

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);

如果你从视图模型中添加按钮,你可以从应用资源中获得按钮模板(通过将资源放在app.xaml文件中)

您可以设置按钮的ControlTemplate。由于您不希望在XAML中这样做,这里有一种方法可以在代码后面实现:

string buttonTemplate =
    "<ControlTemplate TargetType='"Button'">" +
        "<Image Source='"myImage.gif'" />" +              
    "</ControlTemplate>";
myButton.Template = (ControlTemplate)XamlReader.Parse(template);

这只是一个以图像为内容的基本按钮。如果你想在鼠标悬停等动作上有自定义动画,你可以使用VisualStateManager将XAML添加到代码隐藏字符串中来处理这个问题。VisualStateManager