组合框不可编辑但我尝试过:
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>
但发生 System.Windows.Markup.XamlParseException:
Set property 'System.Windows.ResourceDictionary.DeferrableContent' threw an exception.
这是我用来创建组合框并在网格中设置它的位置的代码:
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 事件处理程序中并且用户正在搜索组合框,则消息框将在他们每次传递需要它的产品之一时显示。如果我将消息框的代码放在组合框的 lostfocus 事件处理程序中,它会在您单击组合框的文本框和关闭窗口时触发。所以我需要找到一种方法将事件处理程序附加到组合框的文本框。
如果还有其他方法可以解决这个问题,请告诉我。