Как установить пользовательское свойство как значение XAML?

StackOverflow https://stackoverflow.com/questions/1635644

  •  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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top