我有一个ListBox,我希望只有第一个项目加粗。
查看:
<ListBox x:Name="lstBox" ItemsSource="{Binding List}" DisplayMemberPath="{Binding SequencesDisplayLanguage}" />
视图模型:
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中的第一项呢?
更新
我尝试过克莱门斯的解决方案,但现在所选的项目突出显示已经改变:项目有一个更大的高度,一个带边框的矩形和选择时会出现不同的颜色(见图片)。
如何保留原始项目大小并突出显示?
更新2
发现:
<Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
答案 0 :(得分:5)
您可以通过在其createServer
附加属性上设置ListBoxItem
,根据其索引设置Trigger
样式。您还必须为AlternationIndex
属性设置足够大的值:
AlternationCount
答案 1 :(得分:1)
您如何订购列表以确保您想要的项目是第一个? ObservableCollection中的项目顺序是它们的添加顺序。
如果您有一个序列号作为列表成员的属性,那么您只需将转换器更改为绑定到该列表并返回&#34; bold&#34;如果序列号为0且&#34;正常&#34;否则。