Стиль окна WPF Привязка к статическому свойству нестатического класса - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь привязать цвет кисти границы к свойству управления файла утилит. Каков синтаксис для ссылки на статическое свойство статического класса, который находится в нестатическом классе?

<Window x:Class="Company.FieldServiceManagement.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:FieldServiceManagement"
        xmlns:util="clr-namespace:Company.Utilities;assembly=Comp_Utilities"
        mc:Ignorable="d"
        Title="Field Service Management - Stand Alone" Height="750" MinHeight="500" Width="950" MinWidth="950">
    <Window.Resources>
        <util:ApplicationVariables x:Key="apv" />
    </Window.Resources>
    <Window.Style>
        <Style TargetType="{x:Type Window}">
            <Setter Property="BorderThickness" Value="3"/>
            <Setter Property="BorderBrush" Value="{Binding Source={StaticResource apv}, Path=Colors.Management}"/>
        </Style>
    </Window.Style>
    <Grid>
        <ContentControl x:Name="mainContentControl"/>
    </Grid>
</Window>

Из сборки DLL утилит:

namespace Company.Utilities
{
    public class ApplicationVariables
    {
        public static class Colors
        {
            public static Color Employee { get; } = Color.FromArgb(192, 255, 192);
            public static Color Management { get; } = Color.FromArgb(255, 224, 192);
            public static Color HumanResources { get; } = Color.FromArgb(255, 192, 192);
            public static Color Payroll { get; } = Color.FromArgb(192, 255, 255);
            public static Color Rerpoting { get; } = Color.FromArgb(255, 192, 255);
        }
    }
}

Обновление

Это отличие, хотя и внешне незначительное по сравнению с внешней точкой зрения, заключается в том, что потенциальный дублирующий пост представляет собой простую структуру: нестатический класс -> статическое свойство, в то время как моя ситуация: нестатический класс -> статический класс -> статическое свойство. Метод ссылки не так прост, как потенциальный повторяющийся пост.

Обновление № 2

С проблемой типа, идентифицированной ASh, было создано расширение для преобразования цвета чертежа вЦвет носителя, а затем SolidColorBrush были созданы и на них есть ссылки.

public static wpf.Color ColorDrawingToMedia(this Color color)
{
    return wpf.Color.FromArgb(color.A, color.R, color.G, color.B);
}
----
public static WPF.SolidColorBrush ManagementBrush = new WPF.SolidColorBrush(Management.ColorDrawingToMedia());
----
<Setter Property="BorderBrush" Value="{x:Static util:ApplicationVariables+Colors.ManagementBrush}"/>

1 Ответ

0 голосов
/ 08 октября 2019

Вам не нужен экземпляр какого-либо класса для доступа к static членам.

Кроме того, Colors свойства, похоже, не меняются, поэтому вместо Binding вы можете использовать {x:Static}расширение:

<Setter Property="BorderBrush" Value="{x:Static util:ApplicationVariables+Colors.Management}"/>

ApplicationVariables+Colors синтаксис означает, что Colors является вложенным типом внутри ApplicationVariables


BorderBrush ожидает значение типа Brush, а не Color. Вы можете создать SolidColorBrushes:

public class ApplicationVariables
{
    public static class Colors
    {
        public static Brush Employee { get; } = new SolidColorBrush(Color.FromArgb(192, 255, 192));
        public static Brush Management { get; } = new SolidColorBrush(Color.FromArgb(255, 224, 192));
        public static Brush HumanResources { get; } = new SolidColorBrush(Color.FromArgb(255, 192, 192));
        public static Brush Payroll { get; } = new SolidColorBrush(Color.FromArgb(192, 255, 255));
        public static Brush Rerpoting { get; } = new SolidColorBrush(Color.FromArgb(255, 192, 255));
    }
}
...