WPF-如何在子类控件(ComboBox)中获取模板化部分
我们正在尝试将System.Windows.Controls.ComboBox子类化,以实现一些自定义编辑行为。WPF-如何在子类控件(ComboBox)中获取模板化部分,wpf,combobox,subclass,Wpf,Combobox,Subclass,我们正在尝试将System.Windows.Controls.ComboBox子类化,以实现一些自定义编辑行为。 为此,我们需要EditableTextBox。 类别定义: public class CustomComboBox : System.Windows.Controls.ComboBox 在onload()处理程序中,尝试查找该部件失败: private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
为此,我们需要EditableTextBox。
类别定义:
public class CustomComboBox : System.Windows.Controls.ComboBox
在onload()处理程序中,尝试查找该部件失败:
private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
var cb = sender as System.Windows.Controls.ComboBox;
Debug.Assert(cb != null);
var textBox = cb.Template.FindName("PART_EditableTextBox", cb);
Debug.Assert(textBox != null, "How is this possible -- TextBox not found?");
调用FindName()后,“textBox”为空。在调试器中,我在cb.Template.ChildNames中找到名称“PART_EditableTextBox”。
我们做错了什么?
谢谢--如果要检索派生类中控件的一部分,应使用该方法。调用基方法后,使用此方法的正确位置是在自定义控件的重写中 您可以找到一个示例(查看“预期缺少的FrameworkElement对象”部分)或 此外,自定义的
ComboBox
必须将其属性IsEditable
设置为true
(否则它将使用没有该部分的模板,您可以使用查看ComboBox
默认样式)
我希望它能帮助你
<local:CustomComboBox IsEditable="True">
public class CustomComboBox : ComboBox
{
private TextBox editableTextBox;
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
if (IsEditable)
{
editableTextBox = GetTemplateChild("PART_EditableTextBox") as TextBox;
}
}
}