2016-07-02 27 views
0

私は最初の項目だけを太字にしたいという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)); 
    } 
} 

私は項目がである場合FontWeights.Boldを返しコンバータと、ItemTemplateにを使用して試してみました特定のタイプ(私はその特定のアイテムを最初にリストに入れて、 d)。コードはこれです:

<ListBox.ItemTemplate> 
    <DataTemplate> 
    <TextBlock FontWeight="{Binding Converter={StaticResource sequenceToFontWeightConverter}}" 
         Text="{Binding Path=NameEnglish}" /> 
    </DataTemplate> 
</ListBox.ItemTemplate> 

が、私は、実行時に(NameEnglishまたはNameRomanian)をテキスト結合パスを変更できるようにする必要があります。

Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}, Path=DataContext.SequencesDisplayLanguage}"/> 

をけど(SequencesDisplayLanguage=="NameEnglish"は、すべてのListBoxの項目が「NameEnglish」と表示されている場合)、それは動作しません。だから私はViewModelににプロパティを参照しようとしました。

だから、リストボックスの最初の項目だけを太字にして、実行時にバインディングパスを変更することはできますか?

UPDATE

Iはクレメンスソリューションを試みたが、現在選択された項目の強調表示が変更されました:アイテムが大きい高さを有し、境界線と異なる色で矩形が選択する場合(画像を参照)が表示されます。

enter image description here

にはどうすれば元のアイテムのサイズとハイライトを保つことができますか?

UPDATE見つけた2

<Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}"> 

答えて

4

のスタイルは、添付のプロパティAlternationIndexTriggerを設定することで、インデックスに基づいてスタイルできます。またAlternationCountプロパティの十分な大きさの値を設定する必要があります:

<ListBox ItemsSource="{Binding List}" AlternationCount="2147483647"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Style.Triggers> 
       <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 
        <Setter Property="FontWeight" Value="Bold"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 
+0

すばらしい回避策をありがとう。ただし、選択した項目の強調表示が変更されています(更新された回答を参照)。元の行動を維持する方法を知っていますか? –

+0

見つかった: '