2010-01-26 38 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。你應該只需要第一個。