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 шт):
Хотелось бы уточнить, а проверяли ли вы эту строку кода на 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. Разницы нет.
