我有一个资源字典,其中定义了几个控件(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"]);