Различный пользовательский интерфейс для SelectedItem и ItemTemplate для Silverlight ComboBox - PullRequest
0 голосов
/ 19 июня 2009

По сути, я просто ищу 'SelectedItemTemplate' в SL3 ComboBox. К сожалению, этого не существует.

Я хочу, чтобы SelectedItem выглядел следующим образом: Значение

И элементы в выпадающем списке должны выглядеть так: Значение + дополнительная информация

Последнее достаточно легко сделать с помощью ItemTemplate, но SelectedItem тоже выглядит так. Как я могу предотвратить / исправить это?

Ответы [ 3 ]

3 голосов
/ 27 февраля 2013

Вы можете сделать это, создав собственное вложенное свойство SelectionBoxItemTemplate, а затем определив новый шаблон стиля / элемента управления для ComboBox, который использует этот шаблон в предъявителе контента для области поля выбора.

Вот подходящее прикрепленноесвойство:

public class ComboBoxExt
{
    public static DataTemplate GetSelectionBoxItemTemplate(DependencyObject obj)
    {
        return (DataTemplate) obj.GetValue(SelectionBoxItemTemplateProperty);
    }

    public static void SetSelectionBoxItemTemplate(DependencyObject obj, DataTemplate value)
    {
        obj.SetValue(SelectionBoxItemTemplateProperty, value);
    }

    public static readonly DependencyProperty SelectionBoxItemTemplateProperty =
        DependencyProperty.RegisterAttached("SelectionBoxItemTemplate", typeof (DataTemplate), typeof (ComboBoxExt),
                                            new PropertyMetadata(null));

}

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

Вот как должен выглядеть элемент ContentPresenter в настроенном шаблоне элемента управления:

<ContentPresenter Margin="{TemplateBinding Padding}" 
                  Content="{Binding Path=SelectedItem, RelativeSource={RelativeSource TemplatedParent}}"
                  ContentTemplate="{Binding (a:ComboBoxExt.SelectionBoxItemTemplate), RelativeSource={RelativeSource TemplatedParent}}"
                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
</ContentPresenter>

Наконец, чтобы использовать это, вы должны сделать что-то вроде:

<ComboBox 
   Style="{StaticResource MyAdjustedComboBoxStyle}"
   ItemTemplate="{StaticResource MyDropDownAreaTemplate}"
   Behaviors:ComboBoxExt.SelectionBoxItemTemplate="{StaticResource MySelectionAreaTemplate}">
1 голос
/ 19 июня 2009

Вы ищете .SelectionBoxItemTemplate?

0 голосов
/ 18 ноября 2010

SelectionBoxItemTemplate доступно в Silverlight4, но не может установить значение этого свойства из кода, поскольку оно доступно только для чтения. Также это не свойство зависимости, поэтому невозможно установить значение с помощью метода comboBox.SetValue(). Любая идея о том, как присвоить значение этому свойству в коде позади?

...