1

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

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

希望很清楚。谢谢。

4

2 回答 2

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

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

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

我只是用于BooleanToVisibilityConverter示例,但在那里使用您自己的转换器很容易。

于 2013-06-01T12:05:34.233 回答
1

您可以将您Converter的资源定义为一个层次结构的一部分,Window或者App您可以按照您的意图使用它。

此外,将公共资源移至 App 级别可以让您利用re-usability哪些不同的用户控件可以共享。将您的转换器移至App.xaml-

<App.Resources>
  <!-- Your converter here -->
</App.Resources>
于 2013-06-01T11:55:55.687 回答