C# 在我的自定义文本框中读取表单中的所有文本框

C# 在我的自定义文本框中读取表单中的所有文本框,c#,wpf-controls,C#,Wpf Controls,我在winform项目中使用自定义文本框,我在自定义文本框中添加了此属性: private TextBox _nextControl; public TextBox NextControl { set { _nextControl=value; } get { return _nextControl; } } 对于一个表单,在我的自定义TextBox属性和属性NextControl中有2TextBox(textBox1和textBox2),我得到了这个结果;我可以看到表单中

我在winform项目中使用自定义
文本框
,我在自定义
文本框
中添加了此属性:

private TextBox _nextControl;

public TextBox NextControl 
{
    set { _nextControl=value; }
    get { return _nextControl; }
}
对于一个表单,在我的自定义
TextBox
属性和属性
NextControl
中有2
TextBox
(textBox1和textBox2),我得到了这个结果;我可以看到表单中的所有
TextBox
es:

在这种情况下,属性
NextControl
将在我的表单中显示所有
TextBox
,以选择我的下一个控件

但是当我想在我的新WPF costum中做同样的事情时
TextBox
我得到了同样的条件(2
TextBox
es,textBox1和textBox2):

为什么我没有同样的结果?在我的WPF项目中如何做到这一点


更新:

更多说明,在我的winform项目中,我使用属性
NextControl
从UI属性中选择下一个控件

protected override void OnKeyDown(KeyEventArgs e) 
{
    if(e.KeyCode==Keys.Down) 
        // select the next TextBox chosen in this TextBox option
        _nextControl.Select(); 
}
因为我已经可以在UI中选择下一个
文本框的名称,我不想用额外的代码来做这件事

但这在WPF中不起作用:在属性
NextControl
的窗口中,我看不到我的
TextBox
的名称(如果我选择属性类型=
TextBox
,则在winform中自动)

p.s.:我的自定义
TextBox
继承自
System.Windows.Controls.TextBox


更新:

我上传了一个winform项目,其中包含一个示例项目的自定义
TextBox
,WPF可以表现出相同的行为


我已经更新了此示例的链接

快速查看您的代码告诉我,您的Windows窗体用户控件与WPF不兼容,特别是Windows窗体中的keyDown事件解析参数“KeyEventArgs e”,这是一个System.Windows.Form.Key,但WPF解析“System.Windows.Input.Key”,WPF没有“Select()方法。此外,WPF以非常不同的方式将控件绑定到WinForm,因此您的WinFromuserControl将无法在WPF表单中工作


如果您想在WPF表单中使用类似的行为,您必须编写一个WPF支持的行为。

根据您的解释,我能理解的是

  • 您使用的自定义文本框类的NextControl属性类型为TextBox
  • 按下向下箭头键时,需要自定义文本框自动将焦点转移到下一个文本框
  • 您需要Visual Studio设计支持来为所有CustomTextBox实例选择下一个控件
  • 早期的Winforms Visual studio支持从接口选择可用的匹配类型。但现在的WPF不支持开箱即用。(我们可以通过扩展属性网格来实现这一点)
  • 在您的情况下,可以将NextControl设置为dependency属性,并使用数据绑定实现与下一个控件的关系
  • 对于数据绑定,您需要单击属性名称末尾但属性下拉列表左侧的属性网格中显示的正方形

希望您了解依赖项属性和WPF数据绑定。您需要使用的绑定是元素名绑定。

基于您正在查找文本框(已知值)的事实WinForms应用程序正在帮助您填写propertygrid。对于WinForms中的大多数控件来说,这是正确的,您需要自己在WPF中提供值

您的问题在基础上得到了怎样的回答,以及

实现ICustomTypeDescriptor看起来很难,但实际上大多数函数只能返回TypeDescriptor的实现


唯一有趣的是GetProperties,您可以在其中返回一个新的PropertyDescriptorCollection,其中包含从control.Children.OfType()返回的数组

我真的不知道你在做什么。请更清楚地描述你在做什么,什么不起作用以及你尝试过什么。如果可能的话,提供一个问题的小例子。但是请记住,如果你将文本框绑定到组合框的内容,你只会得到类的名称。这是wpf中的默认行为,每次反驳一些他无法直接显示的内容。因为您没有提供模板。@dowhilefor:我更新了我的问题它类似于@misak我想在costum textBox中使用它,我想在textBox属性中显示我表单上的所有文本框控件您能将示例代码上传到某个地方吗?我知道,我只是想试试现在,如何在我的WPF项目中更改属性NextControl以获得相同的结果