2009-10-28 62 views
2

我有这个库定制颜色属性。我想能够在XAML中使用这些属性是这样的:如何将自定义属性设置为XAML值?

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

包含CustomClass已经被引用的命名空间。我应该怎么做呢?谢谢。

编辑:

我只注意到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" 

如果我用这条线,如建议Zenuka:

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

它在编译时抛出这个错误:

Cannot find the type 'OfficeColors.Background'. Note that type names are case sensitive. 
+1

请问“如”命名空间代表的命名空间CustomClass被发现在?CustomClass是否声明为public(或另一种可访问的方式)? – Zenuka 2009-10-28 08:42:40

+0

是的,是的。我可以从代码隐藏中访问CustomClass,但我无法在XAML中使用。 – sker 2009-10-28 08:59:55

+1

那么如果你可以从后面的代码访问它,那么XAML包含的内容应该是错误的,你可以共享这行xmlns:eg =“.....”和CustomClass(名称空间和类声明)的顶部。 .. – Zenuka 2009-10-28 09:21:11

回答

3

使用此:

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

通知的+号,而不是一个点来引用嵌套类

+0

谢谢。这应该是WPF/XAML的隐藏功能,如果它尚未。 – sker 2009-10-28 10:21:51

2

我假设你有一个静态属性的CustomClass? 然后,你可以使用:

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

但也许你需要更改命名空间前缀...

编辑:
问题在于,因为你是在另一个类中声明一个类... 我建议你将类Backgroud移到OfficeColors类的外面,并将其声明为静态或将Background类的属性移动到OfficeColors类(可能带有Background前缀),或者使用命名空间。

玩得开心:)

EDIT2:使用中的+号
使用尼尔法 'AW:OfficeColors + Background.OfficeColor1' 引用嵌套类,不知道一个:)

+0

感谢您的建议和您的帮助。我正在考虑这样做,但是Nir钉了它。谁会想到一个+符号。 – sker 2009-10-28 10:30:06

1

你将不得不声明该类的一个实例作为其中一个资源。 (假设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> 
相关问题