我创建了一个要添加到UserControls的附加属性。此附加属性需要绑定,此绑定需要转换器。
由于在UserControl声明之后设置了资源,我正在寻找在资源创建之后声明附加属性的方法。我怎么能这样做?
例如,如果我将背景定义为静态资源,则无法在创建控件时设置背景,但是在创建资源之后:
<UserControl ...
...
...>
<UserControl.Resources>
background color declared
</UserControl.Resrouces>
<UserControl.Background>
usage of the StaticResource here is valid.
</UserControl.Background>
所以我想要一个附加属性,我将其定义为:
<UserControl xx:MyAttachedProperty.Bla="{Binding A}" >
但是因为我需要一个转换器,我想在资源之后指定它。
希望它很清楚。感谢。
答案 0 :(得分:2)
您可以使用ResourceDictionary
。
只需使用Add -> Resource dictionary
声明你的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
如果您只需要Converter
中的UserControl
(正如您在上面的评论中所提到的那样),那么您仍然可以将其声明为:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="MyResources.xaml" />
<ResourceDictionary>
<BooleanToVisibilityConverter x:Key="MyConverter" />
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
我刚才使用BooleanToVisibilityConverter
作为示例,但在那里很容易使用自己的转换器。
答案 1 :(得分:1)
您可以将Converter
定义为Window
或App
的一部分资源,而不是像您希望的那样使用它。
此外,将公共资源移动到应用程序级别可以让您获得re-usability
不同用户控件可以共享的优势。将转换器移至App.xaml
-
<App.Resources>
<!-- Your converter here -->
</App.Resources>