Справка по шаблону пользовательского элемента управления Silverlight / WPF

Я надеюсь создать элемент управления, который я называю "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" в шаблоне элемента управления, который показывает связанные элементы, но тогда как я могу добавить свое текстовое поле в ту же панель, что и связанные элементы?

Я был бы очень признателен за любую помощь. Это правильный способ даже пойти на это? Спасибо большое.

1 ответ

Подклассы элементов управления - хорошее начало, но я думаю, что шаблон управления должен быть немного другим. Набор инструментов Silverlight содержит отличную коробку автозаполнения, которую вы можете использовать именно для этой цели. Объедините это с отдельным элементом управления элементами, и у вас должно получиться что-то, что можно будет стилизовать так, чтобы оно выглядело точно так же, как поле "Кому" для живой почты.

<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>
Другие вопросы по тегам