Как установить пользовательское свойство в качестве значения XAML? - PullRequest
2 голосов
/ 28 октября 2009

У меня есть эта библиотека с пользовательскими Color свойствами. Я хочу использовать эти свойства в XAML следующим образом:

    <Style TargetType="{x:Type eg:MyWindow}">
        <Setter Property="Background">
            <Setter.Value>
                <SolidColorBrush Color="CustomClass.CustomColorProperty"/>
            </Setter.Value>
        </Setter>
    </Style>

На пространство имен, содержащее CustomClass , уже ссылаются. Как я должен идти об этом? Спасибо.

EDIT:

Я только что заметил, что CustomClass является статическим, поэтому я не могу создать его экземпляр в XAML. Кроме того, когда я набираю например: , CustomClass не отображается в 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.

Ответы [ 3 ]

4 голосов
/ 28 октября 2009

Используйте это:

<SolidColorBrush Color="{x:Static aw:OfficeColors+Background.OfficeColor1}"/>

Обратите внимание на знак + вместо точки, чтобы ссылаться на вложенные классы

2 голосов
/ 28 октября 2009

Я предполагаю, что у вас есть свойство Static в CustomClass? Тогда вы можете использовать:

<SolidColorBrush Color="{x:Static eg:CustomClass.CustomColorProperty}"/>

но, возможно, вам нужно изменить префикс пространства имен ...

EDIT:
Проблема заключается в том, что вы объявляете класс в другом классе ... Я предлагаю вам переместить класс Backgroud за пределы класса OfficeColors и объявить его статическим или переместить свойства класса Background в класс OfficeColors (возможно, с префиксом Background), ИЛИ использовать пространства имен, как вы пытаетесь.

Веселитесь:)

EDIT2:
Используйте метод Нира, используя знак + aw: OfficeColors + Background.OfficeColor1 для ссылки на вложенные классы, не знал этого:)

1 голос
/ 28 октября 2009

Вы должны будете объявить экземпляр класса как один из ресурсов. (Предполагая, что 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>
...