从外包的 ResourceDictionary 访问 MainWindow.xaml.cs 属性

本文关键字:MainWindow xaml cs 属性 访问 ResourceDictionary | 更新日期: 2023-09-27 18:30:39

我最近正在开发一个新的UserControl,我必须使其可自定义,这在我发现之前不是问题,我必须将数据模板放在外部资源字典中,以使控件更加可自定义。

那我有什么?我有一个非常可定制的UserControl,它能够调用构造函数使用所谓的"templatePath",从中将资源字典加载到UserControl.Resources中。一切正常!

那么问题出在哪里呢?现在位于单独的资源字典中的DataTemplates应该能够绑定到UserControl.xaml(.cs)的属性,以便检查是否选择了特定对象。

但这不是唯一的问题。此外,用户控件具有预定义的命令,这些命令应该能够绑定到数据模板。这在以前显然还不是问题,因为DataTemplates仍然在UserControl.xaml中。

不好的是,我真的必须外包 DataTemplates,因为该控件仅.dll可供用户使用,在这种情况下,之后将没有任何机会添加自定义模板。

有人知道我如何实现这一点吗?提前感谢!

€dit:例如,这将是资源字典,当显示用户控件时,它将动态加载:

<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:classes="clr-namespace:CustomControl"
>
<classes:CompareNodes x:Key="CompareNodes"/>
<Style x:Key="BorderHighlightStyle" TargetType="Border">
    <Setter Property="CornerRadius" Value="6"/>
    <Setter Property="BorderBrush" Value="Gray"/>
    <Setter Property="BorderThickness" Value="2"/>
    <Style.Triggers>
        <Trigger Property="IsMouseOver"  Value="True">
            <Setter Property="Background" Value="Azure"/>
        </Trigger>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Value="True">
                    <Condition.Binding>
                        <MultiBinding Converter="{StaticResource CompareNodes}">
                            <Binding RelativeSource="{RelativeSource Self}" Path="DataContext"/>
                            <Binding Source="{Binding ???????????}" Path="SelectedItem"/>
                        </MultiBinding>
                    </Condition.Binding>
                </Condition>
            </MultiDataTrigger.Conditions>
            <MultiDataTrigger.Setters>
                <Setter Property="Background" Value="LightGoldenrodYellow"/>
                <Setter Property="BorderBrush" Value="Black"/>
            </MultiDataTrigger.Setters>
        </MultiDataTrigger>
    </Style.Triggers>
</Style>
</ResourceDictionary>

如您所见,我不知道如何绑定到UserControl.xaml(.cs)中声明的SelectedItem-Property。

从外包的 ResourceDictionary 访问 MainWindow.xaml.cs 属性

我自己找到了解决方案。

我创建了一个名为"BindableProperties"的类,它包含所有属性,应该可以从外部绑定(即"SelectedItem")和一些命令。之后,我将一个"BindableProperties"对象添加到我的ResourceDictionary中,然后将其加载到我的控件中。

在我的控制中,我从 ResourceDictionary 中读出了"BindableProperties"-Object,并给了它我想要绑定的命令。每次所选项更改时,绑定属性对象都会获得一个新的"选定项",因此它与控件中相同。

好消息是,类中的对象和 ResourceDictionary 中的对象现在相同,这允许我绑定到"绑定属性"的属性,它与我的 UserControl 具有相同的属性。

问题解决了。