1

「AutoCompleteListBox」と呼ぶコントロールを作成したいと考えています。hotmail を使って to: アドレス行のように電子メールを送信したことがあるなら、私はそれを作成したいと考えています。入力ボックスのようなものがあり、入力すると、一致するオブジェクトのドロップダウンが表示されます。オブジェクト (連絡先) を選択すると、長方形のオブジェクトとして入力ボックスに追加されます。この方法で複数のオブジェクトを追加でき、入力ボックスはラップ パネルのように機能します。オブジェクトをバックスペースするか、各オブジェクトの x ボタンをクリックすると、オブジェクトを削除できます。

私のアプローチは、ItemsControl をサブクラス化することから始めることでした。基本的に、バインドされたアイテムとテキスト ボックスを表示するラップ パネルであるコントロール テンプレートの作成を開始しました。バインドされたアイテムとテキスト ボックスの両方を同じラップ パネルに配置する方法がわかりません。ここに私が持っているものがあります:

<Style TargetType="ctrl:AutoCompleteListBox">
    <Setter Property="Width" Value="200"/>
    <Setter Property="Height" Value="100"/>
    <Setter Property="Background" Value="White"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ctrl:AutoCompleteListBox">
                <ScrollViewer x:Name="RootScrollViewer" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Padding="0" Background="{TemplateBinding Background}">
                    <toolkit:WrapPanel IsItemsHost="True">
                        <!--Items Bound To ItemSource Go Here-->
                        <TextBox x:Name="txtInput"/>
                    </toolkit:WrapPanel>
                </ScrollViewer>
            </ControlTemplate>
        </Setter.Value>
    </Setter>        
</Style>

言いたいことをどう表現したらいいのかわからない。バインドされたアイテムを表示するコントロール テンプレートで「ItemsPresenter」を使用できることはわかっていますが、バインドされたアイテムと同じパネルにテキスト ボックスを追加するにはどうすればよいですか?

助けていただければ幸いです。これは正しい方法ですか?どうもありがとう。

4

1 に答える 1

0

項目コントロールをサブクラス化することは良い出発点ですが、コントロール テンプレートは少し異なる設定にする必要があると思います。Silverlight ツールキットには、まさにこの目的に使用できる優れたオートコンプリート ボックスが含まれています。これを個別のアイテム コントロールと組み合わせると、ライブ メールの「To」フィールドとまったく同じようにスタイルを設定できるものが必要になります。

<ControlTemplate>
  <toolkit:WrapPanel>
    <ItemsControl ItemsSource="{TemplateBinding Items}">
      <ItemsControl.ItemsPanel>
        <StackPanel Orientation="Horizontal"/>
      </ItemsControl.ItemsPanel>
      <ItemsControl.ItemTemplate>
        <!-- Add data template for the previously added items here -->
      </ItemsControl.ItemTemplate>
    </ItemsControl>
    <toolkit:AutoCompleteBox ItemsSource="{TemplateBinding AutoCompleteItems}" />
  </toolkit:WrapPanel>
</ControlTemplate>
于 2010-06-13T17:33:21.910 に答える