这有点老了,但希望这能回答直接的问题。
可以创建自己的 xaml 文本框。在解决方案资源管理器中右键单击您正在处理的项目。添加新项目。查找 Visual C# 项 - WPF。然后创建一个具有您想要的首选名称的用户控件 (WPF)(例如 - XamlTextBox.xaml)。
一旦您创建了用户控件,请继续并尽可能简单地设计它。将大小设置为您想要的文本框的确切大小,然后从工具箱中插入一个文本框。使文本框适合您希望的显示方式。 (大小和其他属性可能在 WinForms 代码中创建 XamlTextBox 时在代码中完成)
转到用户控件的代码。确保添加/更改以下代码行:
///All of the original given references should not be removed only add to this list
using System.Windows.Forms.Integration; //Make sure this is part of your project references
namespace ProjectName {
public partial class XamlTextBox : UserControl {
public ElementHost Parent {
get { return _elementHost; }
}
private ElementHost _elementHost;
public XamlTextBox(ElementHost elhost) {
InitializeComponenet();
_elementHost = elhost;
}
public void SetParentText() {
Parent.Text = this.textBox1.Text;
}
}
}
现在可以根据需要在您的表单中实现此 XamlTextBox。
public partial class MainForm: Form {
ElementHost SubjectTBox = new ElementHost();
public MainForm() {
InitializeComponent();
SubjectTBox.Size = new Size(545, 20);
SubjectTBox.Location = new Point(77, 12);
XamlTextBox subject = new XamlTextBox(SubjectTBox);
subject.SubjectTBox.SpellCheck.IsEnabled = true;
SubjectTBox.Child = subject;
this.Controls.Add(SubjectTBox);
}
}
现在您可以在表单上看到 XamlTextBox。
如果您现在想要访问文本,可以使用这行代码将 XamlTextBox 文本传递回父 ElementHost:
((XamlTextBox)SubjectTBox.Child).SetParentText();
现在您可以使用 SubjectTBox.Text 访问文本。
例如- label1.Text = SubjectTBox.Text;
或者,而不是通过代码手动调用 SetParentText 方法,如上所示。您可以将 TextChanged 事件设置为该方法。这可以在 XamlTextBox 控件的设计编辑器中完成。
实际上,您可以在代码中完成所有(即使不是大部分)这一切;但这更容易可视化,然后您可以创建自己的 XamlControl 库,该库可在任何 WinForm 应用程序中使用。
希望这能更直接地回答问题,而不是告诉你改变一切