Я использую поле со списком, содержащее 2 списка элементов, разделенных разделителем. Я строю это так:
public static ObservableCollection<object> Merge<T, U>(IEnumerable<T> collection1, IEnumerable<U> collection2, bool includeSeparator = true)
{
if (collection1 == null || collection2 == null)
{
throw new ArgumentNullException(collection1 == null ? "collection1" : "collection2");
}
List<object> tmp = new List<object>();
tmp.AddRange(collection1.Cast<object>());
if (includeSeparator)
{
tmp.Add(string.Empty);
}
tmp.AddRange(collection2.Cast<object>());
var ret = new ObservableCollection<object>(tmp);
return ret;
}
И в xaml:
<ComboBox
ItemsSource="{Binding Path=AllValues}"
SelectedValue="{Binding Path=SelectedId, Mode=TwoWay, ValidatesOnDataErrors=True}"
SelectedValuePath="Id"
ItemTemplate="{StaticResource CustomItemTemplate}">
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}" BasedOn="{StaticResource {x:Type ComboBoxItem}}">
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBoxItem}">
<Separator HorizontalAlignment="Stretch" IsEnabled="False"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
Он работает, как и ожидалось, у меня есть разделитель, который вставлен в список. Проблема в том, что когда SelectedId
имеет значение null, открывается поле со списком, показывающее разделитель вверху (т. е. полоса прокрутки прокручивается, чтобы разделитель был вверху списка), как на следующем рисунке.
Знаете ли вы какой-нибудь способ, чтобы список открывался вверху?
Заранее спасибо.