附属物申报

时间:2013-06-01 11:45:06

标签: c# .net wpf xaml attached-properties

我创建了一个要添加到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}" >

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

希望它很清楚。感谢。

2 个答案:

答案 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定义为WindowApp的一部分资源,而不是像您希望的那样使用它。

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

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