具有搜索支持的WPF自定义项控件

具有搜索支持的WPF自定义项控件,wpf,combobox,custom-controls,selector,Wpf,Combobox,Custom Controls,Selector,我需要编写一个自定义WPF控件,它看起来应该像一个带有扩展项搜索功能的组合框。为此,我希望有一个文本框和一个带有搜索文本框和列表框的弹出窗口 我的第一个问题是继承选择器,或者更确切地说继承组合框,是否是一个好的决定 第二个问题是,我在哪里可以找到这方面的好例子。。唯一的解决方案似乎是分解微软的库,看看他们在做什么 其他问题: 我应该如何处理事件?e、 g.按钮点击模板。我是应该在模板中查找它并以这种方式注册事件,还是可以像Click=“PART\u Button1CLick”那样直接在XAML中

我需要编写一个自定义WPF控件,它看起来应该像一个带有扩展项搜索功能的组合框。为此,我希望有一个
文本框
和一个带有搜索
文本框
列表框的
弹出窗口

我的第一个问题是继承
选择器
,或者更确切地说继承
组合框
,是否是一个好的决定

第二个问题是,我在哪里可以找到这方面的好例子。。唯一的解决方案似乎是分解微软的库,看看他们在做什么

其他问题:

  • 我应该如何处理事件?e、 g.
    按钮
    点击
    模板
    。我是应该在
    模板中查找它并以这种方式注册事件,还是可以像
    Click=“PART\u Button1CLick”
    那样直接在XAML中注册它

  • 谢谢你们

    我认为你的思路是对的。您可以在文本框上设置一个TextChanged事件,在文本更改后,如果至少有3个字符,您将使用结果列表框生成弹出窗口,并且列表框将其SelectionChanged事件设置为设置文本框的文本并终止其父弹出窗口。您可能应该检查是否已经创建了弹出窗口,并在新角色出现时将其杀死。您甚至可以将弹出窗口的生成放在计时器上,因此如果他们快速键入五个字符,您只需在停机一秒钟后创建一个弹出窗口(避免两个无关的弹出窗口)

    我不知道有什么好的例子,但我也做过类似的事情(甚至可能就是这个,我不记得了),这真的不会那么难

    唯一让我困惑的是你说:

    为此,我想要一个 文本框和带有搜索的弹出窗口 文本框和列表框


    我不明白那里的第二个文本框。您应该只需要第一个。

    好的,这就是我所做的:

    主题/Generic.XAML中的XAML控制模板

    <Style TargetType="{x:Type local:MyControl}">        
        <Setter Property="Template">
        ... 
        </Setter>
    </Style>
    
    [TemplatePart(Name = MyControl.partSelectedTextBox, Type = typeof(TextBox))]
    public class MyControl : Selector
    {
    
    public override void OnApplyTemplate()
    {
        ...
        if (_txtSelected == null)
        {
            _txtSelected = base.GetTemplateChild(partSelectedTextBox) as TextBox;
            if (_txtSelected != null)
            {
                _txtSelected.MouseLeftButtonUp += new MouseButtonEventHandler(PART_txtSelected_MouseLeftButtonUp);
            }
        }
        ...
        base.ApplyTemplate();
    }
    
    }