C# WPF изменение стиля кнопки через код C#

Делаю приложение для практики (обучаюсь), мне нужно создать кнопку для WPF не используя XAML, просто через сам C#, но кнопка должна быть не стандартная, а со стилем от material Desing, не совсем понимаю как это сделать, вроде мой код работает, но нужный стиль не встает, по умолчанию кнопка от material desing квадратная, мне нужна круглая, я прописываю код круглого стиля (копируя из готовой кнопки из XAML) и не работает..

код подобной кнопки в XAML:

<Button Margin="5" Click="Продукты_Click" x:Name="Продукты" ToolTip="Продукты"  Style="{StaticResource ResourceKey=MaterialDesignFloatingActionButton}"  HorizontalAlignment="Left"  Background="White" BorderBrush="White" >
  <Image Source="/icomproduct.png"/>
</Button>

как лучше прописать все свойства этой кнопки через сам C# ? особенно интересует подключение данного стиля, т.к. создание самой кнопки и подключение ToolTip вопросов не вызывает.

string nameCategory = textNewCotegory.Text.Trim();
Button newBotton = new Button();
newBotton.Name = nameCategory;
newBotton.ToolTip = "Новая Категория";
newBotton.Style = Resources["MaterialDesignFloatingActionButton"] 
as Style;
newButtonList.Children.Add(newBotton);

причем после такого кода кнопка создается вообще без стиля, хотя само окно подключено к стилю, если создать кнопку через XAML то стиль есть, через код С# почему то нет..

какая кнопка получается у меня


Ответы (1 шт):

Автор решения: Melkor V

Хотелось бы уточнить, а проверяли ли вы эту строку кода на null? Есть ощущение, что стиль просто не может найтись.

newBotton.Style = Resources["MaterialDesignFloatingActionButton"] 

Стили прописывать в code behind конечно можно, но не стоит. Если очень хочется - то никаких сложностей в этом нет. Смотрите код XAML и создавайте подобные объекты в вашем C# коде. Для начала делаете класс стиля:

Style style = new(typeof(Button));

Далее этому стилю задаете необходимые вам свойства. Например переопределим у кнопки стандартный Foreground:

style.Setters.Add(new Setter(Control.ForegroundProperty, Brushes.Red));

В данном случае свойство Foreground у кнопки наследуется от его предка Control, поэтому написал так Control.ForegroundProperty, хотя можно писать и Button.ForegroundProperty. Разницы нет.

→ Ссылка