Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF-如何在子类控件(ComboBox)中获取模板化部分_Wpf_Combobox_Subclass - Fatal编程技术网

WPF-如何在子类控件(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)

我们正在尝试将System.Windows.Controls.ComboBox子类化,以实现一些自定义编辑行为。
为此,我们需要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;
        }
    }
}