WPF Custom Items Control с поддержкой поиска - PullRequest
0 голосов
/ 26 января 2010

Мне нужно написать собственный элемент управления WPF, который должен выглядеть как ComboBox с расширенной функцией поиска элементов. Для этого я хотел бы иметь TextBox и Popup с поиском TextBox и ListBox.

Мой первый вопрос: правильное ли решение наследовать от Selector, а точнее ComboBox?

Второй вопрос: где я могу найти хороший пример этого ... похоже, единственное решение - это разобрать библиотеку Microsoft и посмотреть примерно, что они делают.

Другие вопросы:

  1. Как я должен обрабатывать события? например Button нажмите Template. Должен ли я найти его в Template и зарегистрировать события таким образом, или я могу зарегистрировать его непосредственно в XAML, как Click="PART_Button1CLick"?

Спасибо, ребята!

Ответы [ 2 ]

0 голосов
/ 03 февраля 2010

ОК. Вот что я сделал:

Шаблон управления 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();
}

}
0 голосов
/ 26 января 2010

Я думаю, вы на правильном пути. У вас может быть событие TextChanged в TextBox, и после изменения текста, если есть хотя бы 3 символа, вы порождаете всплывающее окно со списком результатов, и у списка есть свое событие SelectionChanged, установленное для установки текста TextBox и убить его родительское всплывающее окно. Вы, вероятно, должны проверить, существует ли уже созданное всплывающее окно, и убить его, если появится новый персонаж. Вы можете даже поместить всплывающее окно в таймер, поэтому, если они быстро набирают пять символов, вы создаете всплывающее окно только после секунда простоя (исключая два посторонних всплывающих окна).

Я не знаю хорошего примера, но я сделал нечто подобное (возможно, даже именно это, я не помню), и это действительно не будет так сложно.

Единственное, что смущает меня, это когда вы говорите:

Для этого я бы хотел иметь TextBox и всплывающее окно с поиском TextBox и ListBox.

Я не понимаю второй TextBox там. Вам нужно только первое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...