2013-06-01 147 views
1

我已经创建了一个附加属性添加到UserControls。此附加属性需要绑定,并且此绑定需要转换器。附加属性声明

由于资源是在UserControl声明后设置的,我正在寻找一种方法来在资源创建后声明附加属性。我怎样才能做到这一点?

一个例子,如果我定义背景的静态资源,我不能设置在控制创作背景,但在资源创建后:

<UserControl ... 
      ... 
      ...> 

<UserControl.Resources> 
    background color declared 
</UserControl.Resrouces> 

<UserControl.Background> 
    usage of the StaticResource here is valid. 
</UserControl.Background> 

所以我想同样带有附加属性,我woudl正常定义为:

<UserControl xx:MyAttachedProperty.Bla="{Binding A}" > 

但因为我需要一个转换器,我想在资源后面指定它。

希望它很清楚。谢谢。

回答

1

您可以将您的Converter定义为一个等级的资源,可以是WindowApp的一部分,也可以按照您的意图使用它。

此外,将公共资源移动到应用程序级别可让您获得re-usability不同的用户控件可以共享的优势。将您的转换器移至App.xaml -

<App.Resources> 
    <!-- Your converter here --> 
</App.Resources> 
+0

我还没有意识到共享那种方式的资源。很好的事情要知道。我要检查它。无论如何,你知道我能否以某种方式声明像这样的附属属性?因为这个转换器是特定的视图,它不会被肯定重用。 –

+0

@SoMoS如果您只使用UserControl上的属性,为什么不把它设置为正常的DP。这样你就可以得到你想要的行为,并且足够清楚地说明它只是一个属性UserControl – Viv

+0

它的转换器只能在用户控件上使用。不管怎么说,还是要谢谢你! –

2

您可以使用ResourceDictionary

只是Add -> Resource dictionary

它添加在Solution Explorer中声明你的Converter有像

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <BooleanToVisibilityConverter x:Key="BooleanToVisibility" /> 

</ResourceDictionary> 

在你XAML,你可以使用它像

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="MyResources.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Window.Resources> 

现在你可以使用你的Converter任何地方你有你的Resource Dictionary

如果你只需要你的ConverterUserControl(如你在上面的评论中提及),那么你仍然可以把它声明,如:

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="MyResources.xaml" /> 
      <ResourceDictionary> 
       <BooleanToVisibilityConverter x:Key="MyConverter" /> 
      </ResourceDictionary> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Window.Resources> 

我只是用BooleanToVisibilityConverter的例子,但它很容易在那里使用你自己的转换器。

+0

没有。在调用Window.Resources之前,我不能使用声明到该字典中的任何东西,这正是我所遇到的问题。 –

+1

有两个步骤。在字典中声明它,然后在window.resources中添加该字典并且可以使用它。 –

+0

现在我明白你的观点。谢谢。 –