Установите значение в xaml, используя поле класса - PullRequest
0 голосов
/ 25 июня 2018

У меня есть DataGrid как:

<DataGrid Grid.Row="4" Name="grvAllCry" Margin="5,5,5,5" ItemsSource="{Binding}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Rank" Width="10*" >
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Label Content="{Binding Rank}" Foreground="#46BF6E"></Label>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
     </DataGrid.Columns>
</DataGrid>

Как видите, я установил Foreground строки DataGrid, равной "# 46BF6E". Но у меня есть много DataGrid, и я хочу повторно использовать эти переменные. Что-то вроде:

public static class Config
{
    public static string MyGreen = "#46BF6E";
    public static string MyRed = "#D14836";
    public static string MyBlue = "#428BCA";
}

Есть ли способ, как я могу создать такой класс и использовать его переменную во многих различных файлах xaml? Например:

<Label Content="{Binding Rank}" Foreground="MyGreen"></Label>

Я не знаю, как вызвать переменную из файла .cs в то время как в файле xaml, пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

можно ссылаться на static свойство или поле (включая const поля), используя расширение {x:Static ...}.Для класса Config это должно быть:

<Label Content="{Binding Rank}" Foreground="{x:Static myNameSpace:Config.MyGreen}"/>

Файл xaml должен включать определение пространства имен класса Config (xmlsns:myNameSpace="....")

Однако повторно используемые элементы обычно определяются как ресурсы.Ресурсы, видимые в приложении, определены в App.xaml:

<Application.Resources>
    <SolidColorBrush x:Key="MyGreen" Color="#46BF6E"/>
    <SolidColorBrush x:Key="MyRed" Color="#D14836"/>        
    <SolidColorBrush x:Key="MyBlue" Color="#428BCA"/> 
</Application.Resources>

, такие ресурсы можно использовать из StaticResource / DynamicResource расширение:

<Label Content="{Binding Rank}" Foreground="{StaticResource MyGreen}"/>
0 голосов
/ 25 июня 2018

Вы можете создать новый ResourceDictionary, где вы определяете ресурс Brush:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <SolidColorBrush x:Key="myBrush" Color="#46BF6E"/>
</ResourceDictionary>

Если вы хотите иметь возможность ссылаться на этот ресурс во всем приложении, вы можете объединить этот ресурсдобавить словарь в ваш App.xaml:

<Application x:Class="WpfApp1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Dictionary1.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

... и ссылаться на ресурс из любого представления, используя расширение разметки StaticResource:

 <Label Content="{Binding Rank}" Foreground="{StaticResource myBrush}"></Label>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...