Pregunta

Tengo esta biblioteca con propiedades personalizadas de Color . Quiero poder usar estas propiedades en XAML así:

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

El espacio de nombres que contiene CustomClass ya está referenciado. ¿Cómo debo hacer esto? Gracias.

EDITAR:

Acabo de notar que CustomClass es estático, por lo que no puedo crear una instancia de este en XAML. Además, cuando escribo por ejemplo: , CustomClass no aparece en intellisense. No puedo lograr que ninguna de sus soluciones funcione, aunque deberían hacerlo, si tuviera una clase de instancia. ¿Hay alguna solución para esta situación?

EDITAR 2:

Esta es la clase real y el espacio de nombres:

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");
        }
    }
}

Y este es el espacio de nombres XAML:

xmlns:aw="clr-namespace:Assergs.Windows;assembly=Assergs.Windows"

Y si uso esta línea, como lo sugiere Zenuka:

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

Lanza este error en tiempo de compilación:

Cannot find the type 'OfficeColors.Background'. Note that type names are case sensitive.
¿Fue útil?

Solución

Use esto:

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

Observe el signo + en lugar de un punto para hacer referencia a clases anidadas

Otros consejos

¿Asumo que tiene una propiedad estática en CustomClass? Entonces podrías usar:

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

pero tal vez necesite cambiar el prefijo del espacio de nombres ...

EDITAR:
El problema radica en que estás declarando una clase en otra clase ... Le sugiero que mueva la clase Backgroud fuera de la clase OfficeColors y la declare estática o mueva las Propiedades de la Clase de fondo a la clase OfficeColors (tal vez con un prefijo de Fondo), O use espacios de nombres como lo está intentando.

Diviértete :)

EDIT2:
Use el método de Nir usando el signo + 'aw: OfficeColors + Background.OfficeColor1' para hacer referencia a clases anidadas, no sabía cuál :)

Debería declarar una instancia de la clase como uno de los recursos. (Suponiendo que CustomColorProperty no sea estático)

<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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top