0

ComboBox拡張アイテム検索機能のように見えるカスタム WPF コントロールを作成する必要があります。この目的のためにTextBoxPopup検索TextBoxListBox.

私の最初の質問は、 から継承するのが適切な決定であるかどうかSelector、またはむしろComboBox?

2 番目の質問は、これの良い例をどこで見つけることができるかということです。唯一の解決策は、Microsoft のライブラリを逆アセンブルして、彼らが何をしているかを大まかに調べることです。

その他の質問:

  1. イベントをどのように処理すればよいですか? たとえばButton、 をクリックしますTemplate。で調べてTemplateそのようにイベントを登録する必要がありますか、それとも XAML のように直接登録できClick="PART_Button1CLick"ますか?

君たちありがとう !

4

2 に答える 2

0

あなたは正しい方向に進んでいると思います。TextBoxでTextChangedイベントを設定できます。テキストが変更された後、少なくとも3文字ある場合は、結果のリストボックスを使用してポップアップを生成します。リストボックスには、TextBoxのテキストを設定するためのSelectionChangedイベントが設定されています。親ポップアップを強制終了します。おそらく、ポップアップがすでに作成されているかどうかを確認し、新しい文字が入った場合はそれを強制終了する必要があります。ポップアップの生成をタイマーに設定することもできるため、5文字をすばやく入力する場合は、後にポップアップを作成するだけです。 1秒のダウンタイム(2つの無関係なポップアップを回避)。

良い例はわかりませんが、似たようなことをしたことがあります(おそらくこれでも、覚えていません)。それほど難しいことではありません。

私を混乱させる唯一のことはあなたが言うときです:

この目的のために、検索テキストボックスとリストボックスを備えたテキストボックスとポップアップが必要です。

そこにある2番目のTextBoxがわかりません。最初のものだけが必要です。

于 2010-01-26T13:41:05.897 に答える
0

OKこれは私がやったことです:

Themes/Generic.XAML のXAML ControlTemplate :

<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();
}

}
于 2010-02-03T14:11:48.337 に答える