将 System.Windows.Controls 存储到字典中

本文关键字:字典 存储 Controls System Windows | 更新日期: 2023-09-27 17:55:24

我需要一本字典,它将类型作为键,控制作为值。例如,对于字符串类型,控件将为文本框;对于布尔类型,控件将是单选按钮,依此类推...问题是当我声明字典时,例如Dictionary<Type, Control>,并尝试添加文本框,例如它说文本框是一种类型,在给定的上下文中无效。有什么想法吗?

将 System.Windows.Controls 存储到字典中

你必须声明Dictionary<Type, Type>而不是Dictionary<Type, Control>,因为TextBoxType

private static Dictionary<Type, Type> s_ControlTypes = new Dictionary<Type, Type>() {
  {typeof(string), typeof(TextBox)},
  {typeof(bool), typeof(RadioButton)},
};

然后使用它

// Let's create a control for, say, `bool` type:
Control ctrl = Activator.CreateInstance(s_ControlTypes[typeof(bool)]) as Control;
  Dictionary<Type, Control> dictionary = new Dictionary<Type, Control>();
  dictionary.Add(typeof(string), textBox);
  dictionary.Add(typeof(bool), checkBox);

看起来您正在尝试将Control类型(字面意思)添加到字典中,该字典应该包含Control实例:

var dictionary = new Dictionary<Type, Control>();
dictionary.Add(typeof(string), TextBox);

你不能这么做。您需要放置Control的特定实例,或者,如果这只是一个进一步参考的映射,请重新声明字典:

var dictionary = new Dictionary<Type, Type>();

并用类型填充它:

dictionary.Add(typeof(string), typeof(TextBox));
// and so on