如何访问类支持的资源字典实例?



我有一个资源字典,其中定义了几个控件(TextBox和Button),它们彼此无关。我可以通过TryFindResource访问控件,没有问题。

接下来,我想将事件附加到按钮上,所以我将x:Class添加到字典中,并创建了一个支持类(基于我在这里找到的信息),并且事件正常运行。

我遇到的问题是:我如何获得访问创建的资源目录(即我的类),支持加载xaml?最后,我想在资源目录中创建一些复杂的控件,并在后台类中调用一个简单的单一函数来返回这些控件的列表,这样我就可以将它们添加到我的窗口中,而不需要为每个控件调用TryFindResource。

我在类中有一个构造函数(并调用InitializeComponent),但是自动创建的表示TextBox和Button的内部字段为空。构造函数很早就被调用了(远早于我的GUI中的任何东西),但是在后台的Connect调用显然还没有完成,甚至在我的窗口的Loaded事件被调用的时候。

我已经做了大量的搜索,但是我找到的所有东西都停留在定义类点,并且没有显示任何用法。

我是找错对象了吗?我确信我误解了这一切的功能和它的能力,但它似乎真的应该能够以某种方式获得一个实例。

部分XAML:

<ResourceDictionary x:Class="MM.Window.TitleBarControls"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
<MMM:ApplicationInformation x:Key="ApplicationInformation" />
<Button x:Key="ButtonTest"
x:Name="ButtonTest"
Content="Button"
Click="ButtonClickTest" />
</ResourceDictionary>

部分类:

public partial class TitleBarControls : ResourceDictionary
{
public ObservableList<object> HeaderControls = new();
public TitleBarControls()
{
TitleBarControlsMain = this;
InitializeComponent();
// ButtonTest is null here
HeaderControls.Add(ButtonTest);
}
private void ButtonClickTest(object sender_, System.Windows.RoutedEventArgs e_)
{
int i = 1;
}
}

您的示例中的按钮是一个资源,它被添加到ResourceDictionary本身。

从XAML标记中删除x:Name(以避免混淆),并使用代码后面的索引器访问它:

HeaderControls.Add(this["ButtonTest"]);

最新更新