2010-01-26 80 views
0

我需要编写一个自定义的WPF控件,应该看起来像一个ComboBox与扩展项搜索功能。为此,我想有一个TextBox和一个Popup与搜索TextBoxListBoxWPF自定义项目控制与搜索支持

我的第一个问题是,如果继承Selector或者更确切地说ComboBox是一个很好的决定?

第二个问题是我在哪里可以找到一个很好的例子..唯一的解决方案似乎是拆卸微软的库,并大致看他们在做什么。

其他问题:

  1. 我应该如何处理事件?例如Button点击Template。我是否应该在Template中查找并以这种方式注册事件,或者我可以直接在XAML中注册它,如Click="PART_Button1CLick"

谢谢各位!

回答

0

确定这是我做了什么:

XAML控件模板在主题/ Generic.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(); 
} 

} 
0

我认为你是在正确的轨道上。您可以在TextBox上有一个TextChanged事件,并且在文本更改之后,如果至少有3个字符,则使用结果列表框产生弹出窗口,并且列表框的SelectionChanged事件被设置为设置TextBox的文本,并且杀死它的父级弹出。你应该检查一下是否有一个已经创建的弹出窗口,如果有新的字符出现,就杀掉它。你甚至可以把弹出窗口产生在一个定时器上,所以如果他们快速输入五个字符,你只能在第二次停机(避免两个无关的弹出窗口)。

我不知道一个很好的例子,但我已经做了类似的东西(甚至可能正是这一点,我不记得了),它真的不会那么难。

,混淆我的唯一的事情是,当你说:

为此,我想有一个 文本框和一个弹出与搜索 文本框和一个列表框。

我不明白在那里的第二个TextBox。你应该只需要第一个。