Как установить пользовательское свойство как значение XAML?
-
06-07-2019 - |
Вопрос
У меня есть эта библиотека с настраиваемым Цвет характеристики.Я хочу иметь возможность использовать эти свойства в XAML следующим образом:
<Style TargetType="{x:Type eg:MyWindow}">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="CustomClass.CustomColorProperty"/>
</Setter.Value>
</Setter>
</Style>
Пространство имен, содержащее Пользовательскийкласс уже упоминается.Как мне это сделать?Спасибо.
РЕДАКТИРОВАТЬ:
Я только что заметил это Пользовательскийкласс является статическим, поэтому я не могу создать его экземпляр в XAML.Кроме того, когда я печатаю например:, Пользовательскийкласс не отображается в intellisense.Я не могу заставить работать ни одно из ваших решений, хотя они должны были бы работать, если бы у меня был класс экземпляра.Есть ли обходной путь для этой ситуации?
РЕДАКТИРОВАТЬ 2:
Это фактический класс и пространство имен:
namespace Assergs.Windows
{
public static class OfficeColors
{
public class Background
{
public static Color OfficeColor1 = (Color)ColorConverter.ConvertFromString("#e4e6e8");
public static Color OfficeColor2 = (Color)ColorConverter.ConvertFromString("#dce0ed");
public static Color OfficeColor3 = (Color)ColorConverter.ConvertFromString("#a8c3e0");
}
}
}
А это пространство имен XAML:
xmlns:aw="clr-namespace:Assergs.Windows;assembly=Assergs.Windows"
И если я использую эту строку, как предложил Зенука:
<SolidColorBrush Color="{x:Static aw:OfficeColors.Background.OfficeColor1}"/>
Во время компиляции выдает эту ошибку:
Cannot find the type 'OfficeColors.Background'. Note that type names are case sensitive.
Решение
Использовать это:
<SolidColorBrush Color="{x:Static aw:OfficeColors+Background.OfficeColor1}"/>
Обратите внимание на знак + вместо точки для ссылки на вложенные классы.
Другие советы
Я предполагаю, что у вас есть свойство Static в CustomClass?Тогда вы можете использовать:
<SolidColorBrush Color="{x:Static eg:CustomClass.CustomColorProperty}"/>
но, возможно, вам нужно изменить префикс пространства имен...
РЕДАКТИРОВАТЬ:
Проблема заключается в том, что вы объявляете класс в другом классе...Я предлагаю вам переместить класс Backgroud за пределы класса OfficeColors и объявить его статическим или переместить свойства фонового класса в класс OfficeColors (возможно, с префиксом Background), ИЛИ использовать пространства имен, как вы пытаетесь.
Веселиться :)
РЕДАКТИРОВАТЬ2:
Используйте метод Нира, используя знак + 'aw:OfficeColors+Background.OfficeColor1' для ссылки на вложенные классы, я этого не знал :)
Вам придется объявить экземпляр класса как один из ресурсов.(Предполагая, что CustomColorProperty не является статическим)
<CustomNamespace.CustomClass x:Key=CcInstance />
<Style TargetType="{x:Type eg:MyWindow}">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="{Binding Source={StaticResource CcInstance}, Path=CustomColorProperty} />
</Setter.Value>
</Setter>
</Style>