C# 如何将lostfocus事件处理程序添加到动态创建的组合框';什么是文本框?

C# 如何将lostfocus事件处理程序添加到动态创建的组合框';什么是文本框?,c#,wpf,combobox,C#,Wpf,Combobox,组合框不可编辑,但我已尝试: TextBox TxtBox = (TextBox)myCombo.Template.FindName("PART_EditableTextBox", myCombo); 但它会变成空的 我已尝试将其添加到Windows xaml: <Style TargetType="{x:Type ComboBox}"> <Setter Property="Template"> <Setter.Val

组合框不可编辑,但我已尝试:

TextBox TxtBox = (TextBox)myCombo.Template.FindName("PART_EditableTextBox", myCombo);
但它会变成空的

我已尝试将其添加到Windows xaml:

   <Style TargetType="{x:Type ComboBox}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TextBox}">
                    <Border x:Name="PART_EditableTextBox" Focusable="True" Background="{TemplateBinding Background}" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
下面是我用来创建组合框并设置其在网格中的位置的代码:

public static System.Windows.Controls.ComboBox createNewComboBox(String newComboBoxName, SelectionChangedEventHandler selectionChangedEventHandler,RoutedEventHandler lostFocusEventHandler)
    {
        System.Windows.Controls.ComboBox newComboBox = new System.Windows.Controls.ComboBox();
        newComboBox.Name = newComboBoxName;
        if (selectionChangedEventHandler != null) newComboBox.SelectionChanged += selectionChangedEventHandler;
        if (lostFocusEventHandler != null) newComboBox.LostFocus += lostFocusEventHandler;
        return newComboBox;
    }

    public static void setNewControlLocation(System.Windows.Controls.Control control, Int32 rowIndex, Int32 columnIndex, Grid parent)
    {
        Grid.SetRow(control, rowIndex);
        Grid.SetColumn(control, columnIndex);
        parent.Children.Add(control);
    }
这会将lostfocus添加到组合框,而不是组合框的文本框

用户在一行中选择并输入数据。用户可以通过单击加号按钮或屏幕左侧或使用F5键添加更多行。该行包含多个控件,其中一个是组合框。组合框下拉产品名称列表,如果选择了某些产品,则需要显示消息框。如果我将代码放在SelectionChanged事件处理程序中,并且用户正在搜索组合框,那么每当他们传递一个需要它的产品时,messagebox就会显示出来。如果我将messagebox的代码放在组合框的lostfocus事件处理程序中,当您单击组合框的文本框并关闭窗口时,它将触发。因此,我需要找到一种方法将事件处理程序附加到组合框的文本框

如果有其他方法,请告诉我


为什么要在代码中首先创建UI元素?这就是XAML的用途,你知道…
CreateNewComboBox
SetNewControlLocation
。。。你的代码看起来太多winforms了,让我感觉就像呕吐一样回到homeHighCore——UI元素是在代码中创建的,因为UI元素的数量是由用户指定的。可能有一个,也可能有50个。也没必要粗鲁,我在学习。任何建议都会有帮助。然后您需要使用
ItemsControl
(或它的衍生工具之一(如
ListBox
)根据您的需要,为您需要显示的每个项目定义一个适当的
数据模板
。发布一个您需要的屏幕截图,我可以告诉您在WPF中执行此操作的正确方法。您必须忘记winforms心态并接受MVVM。否则,您将在WPF中惨败,因为不使用正确的模式会导致可怕的错误您必须在这里处理的电子黑客(例如
.Template.FindName()
public static System.Windows.Controls.ComboBox createNewComboBox(String newComboBoxName, SelectionChangedEventHandler selectionChangedEventHandler,RoutedEventHandler lostFocusEventHandler)
    {
        System.Windows.Controls.ComboBox newComboBox = new System.Windows.Controls.ComboBox();
        newComboBox.Name = newComboBoxName;
        if (selectionChangedEventHandler != null) newComboBox.SelectionChanged += selectionChangedEventHandler;
        if (lostFocusEventHandler != null) newComboBox.LostFocus += lostFocusEventHandler;
        return newComboBox;
    }

    public static void setNewControlLocation(System.Windows.Controls.Control control, Int32 rowIndex, Int32 columnIndex, Grid parent)
    {
        Grid.SetRow(control, rowIndex);
        Grid.SetColumn(control, columnIndex);
        parent.Children.Add(control);
    }