附财产声明

本文关键字:声明 财产 | 更新日期: 2023-09-27 18:16:36

我已经创建了一个附加属性来添加到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}" >

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

希望这是清楚的。谢谢。

附财产声明

您可以使用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>

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

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

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

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

您可以将Converter定义为资源1层次结构,作为WindowApp的一部分,然后您可以像您想要的那样使用它。

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

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