У меня есть ListBox, в котором я хотел бы иметь только первый элемент, выделенный жирным шрифтом.Как получить первый элемент, выделенный жирным шрифтом в ListBox?
Вид:
<ListBox x:Name="lstBox" ItemsSource="{Binding List}" DisplayMemberPath="{Binding SequencesDisplayLanguage}" />
ViewModel:
private ObservableCollection<Sequence> _list = new ObservableCollection<Sequence>() { };
public ObservableCollection<Sequence> List { get { return _list; } }
private string _sequencesDisplayLanguage = "NameEnglish";
public string SequencesDisplayLanguage
{
get
{
return _sequencesDisplayLanguage;
}
set
{
_sequencesDisplayLanguage = value;
OnPropertyChanged("SequencesDisplayLanguage");
}
}
Модель:
public class Sequence : INotifyPropertyChanged
{
public Sequence()
{
NameEnglish = "";
NameRomanian = "";
}
private string _nameEnglish;
public string NameEnglish
{
get
{
return _nameEnglish;
}
set
{
_nameEnglish = value;
OnPropertyChanged("NameEnglish");
}
}
private string _nameRomanian;
public string NameRomanian
{
get
{
return _nameRomanian;
}
set
{
_nameRomanian = value;
OnPropertyChanged("NameRomanian");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
Я попытался с помощью ItemTemplate, с преобразователем, который возвращает FontWeights.Bold
, если элемент имеет определенный тип (я позаботился о том, чтобы поместить этот конкретный элемент первым в список, чтобы он был смелым г). Код заключается в следующем:
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock FontWeight="{Binding Converter={StaticResource sequenceToFontWeightConverter}}"
Text="{Binding Path=NameEnglish}" />
</DataTemplate>
</ListBox.ItemTemplate>
, но мне нужно, чтобы иметь возможность изменить текст привязки путь во время выполнения (NameEnglish
или NameRomanian
). Так что я попытался ссылки на недвижимость в ViewModel:
Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}, Path=DataContext.SequencesDisplayLanguage}"/>
, но он не работает (если SequencesDisplayLanguage=="NameEnglish"
затем все элементы ListBox отображаются как «NameEnglish»).
Итак, Как я могу выделить только первый элемент в ListBox, имея возможность изменить путь привязки во время выполнения?
UPDATE
Я попытался решением Клеменса, но теперь выбранный элемент подсветка изменилась: элемент имеет большую высоту, прямоугольник с границей и другой цвет появляется при выборе (смотрите рисунок).
Как я могу сохранить оригинальный размер пункта и выделение?
UPDATE 2
Обнаруженные:
<Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
Благодарим вас за прекрасное обходное решение.Однако выделение выделенного элемента изменилось (см. Обновленный ответ). Вы знаете, как сохранить первоначальное поведение? –
Обнаружено: '