Как определить и использовать ресурсы в xaml, чтобы их можно было использовать в C # - PullRequest
17 голосов
/ 22 июля 2010

Теоретически, я думаю, что я могу определить Кисти и Цвета и т. Д. В файле xaml и назначить это button.background в c #. Но как мне это сделать? Куда я положу свое определение линейной градиентной кисти следующим образом:

<LinearGradientBrush x:Key="BlaBrush">
                <GradientStop Offset="0" Color="Red"/>
                <GradientStop Offset="1" Color="Green"/>
</LinearGradientBrush>

Простое размещение его в разных местах файла xaml моего окна приводит к различным сообщениям об ошибках: /

Я нашел этот вопрос здесь в stackoverflow: Как использовать определенный ресурс кисти в XAML, из C # , который объясняет его часть, но он, кажется, знает, где делать определение Brush.

Я также попытался добавить wpf-шаблон brightblue.xaml в приложение и добавил <ResourceDictionary Source="ShinyBlue.xaml"/> в application.resources в app.xaml. Это мгновенно делает все мои кнопки синими, но тем не менее «вещи», определенные в блестящем.xaml, такие как NormalBrush, недоступны из C # - по крайней мере, я не знаю как.

Марк

Ответы [ 4 ]

17 голосов
/ 22 июля 2010

Ваш 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;
    }
15 голосов
/ 22 июля 2010

Обратите внимание, что в существующих ответах говорится о размещении ресурсов в Window.Resources. Если вы хотите, чтобы ресурсы были доступны для всего приложения, вы можете подумать о том, чтобы поместить их в App.xaml или еще лучше, создать автономные словари ресурсов, которые можно включать в ваши представления и использовать повторно в других местах (включая другие проекты)

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="DefaultStyles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
        <Style x:Key="my_style" />
    </ResourceDictionary>
</UserControl.Resources>
13 голосов
/ 22 июля 2010

Поместите их в коллекцию ресурсов одного из ваших элементов в 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;

См. Обзор ресурсов для получения дополнительной информации.

8 голосов
/ 22 июля 2010

Вы можете получить доступ к ресурсам приложения как

Application.Current.Resources["BlaBrush"] as LinearGradientBrush

Или вы добавляете ресурс к ресурсам элемента управления и получаете к ним доступ, как писал Quartermeister.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...