Теоретически, я думаю, что могу определить Кисти и Цвета и т.д. в xaml файле и присвоить это button.background в c#. Но как я делаю это? Где делают я поместил свое lineargradientbrush определение как это:
Просто помещение его в различных местах в xaml файле моего окна приводит к различным сообщениям об ошибках:/
Я нашел этот вопрос здесь на stackoverflow: Как использовать определенный ресурс кисти в XAML от C#, который объясняет часть его, но он, кажется, знает, где сделать Описание кисти.
Я также попытался добавить shinyblue.xaml wpf шаблон к приложению и добавил
к application.resources в app.xaml. Это делает все мои кнопки синими немедленно, но тем не менее, "вещи", определенные в shinyblue.xaml как NormalBrush, не доступны от C# - по крайней мере, я не знаю как.
Marc
Ваш xaml будет выглядеть примерно так:
MainWindow.xaml
<Window x:Class="BrushResource.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<LinearGradientBrush x:Key="BrushOne" StartPoint="0,0.5" EndPoint="1,0.5" Opacity="0.5">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="Black" Offset="0" />
<GradientStop Color="Silver" Offset="1" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
<LinearGradientBrush x:Key="BrushTwo" StartPoint="0,0.5" EndPoint="1,0.5" Opacity="0.5">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="Maroon" Offset="0" />
<GradientStop Color="Silver" Offset="1" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Window.Resources>
<StackPanel>
<Button Content="Button" Width="100" Click="myButton_Click"/>
</StackPanel>
Чтобы присвоить значение, вам нужно взять градиентную кисть из ресурсов следующим образом:
MainWindow.xaml.cs
private void myButton_Click(object sender, RoutedEventArgs e)
{
(sender as Button).Background = this.Resources["BrushOne"] as LinearGradientBrush;
}
Обратите внимание, что в существующих ответах говорится о помещении ресурсов в Window.Resources. Если вы хотите, чтобы ресурсы были доступны для всего приложения, вы можете рассмотреть возможность помещения их в App.xaml или, что еще лучше, создать автономные словари ресурсов, которые можно включить в ваши представления и повторно использовать где-то еще (включая другие проекты)
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="DefaultStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
<Style x:Key="my_style" />
</ResourceDictionary>
</UserControl.Resources>
Вы можете получить доступ к ресурсам приложения как
Application.Current.Resources["BlaBrush"] as LinearGradientBrush
Или вы добавите ресурс к ресурсам элемента управления и получите к ним доступ, как написал Quartermeister.
Поместите их в коллекцию ресурсов одного из ваших элементов в XAML:
<Window ...>
<Window.Resources>
<LinearGradientBrush x:Key="BlaBrush">
<GradientStop Offset="0" Color="Red"/>
<GradientStop Offset="1" Color="Green"/>
</LinearGradientBrush>
<!-- Other resources -->
</Window.Resources>
<!-- Contents of window -->
</Window>
Затем получите их в коде с помощью FindResource
var blaBrush = this.FindResource("BlaBrush") as LinearGradientBrush;
См. Обзор ресурсов Чтобы получить больше информации.