2015-09-14 39 views
0

我有一個ComboBox的樣式。併爲其設置Font-family。如何更改Combobox SelectedItem的字體系列?

爲項目設置字體,但不爲所選項目設置。

<DataTemplate x:Key="SelectionBoxTextTemplate"> 
    <TextBlock FontFamily="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}, Path=FontFamily}" Text="{Binding}"/> 
</DataTemplate> 
<Style x:Key="{x:Type ComboBox}" TargetType="{x:Type ComboBox}"> 
    <Setter Property="MinWidth" Value="120"/> 
    <Setter Property="FontFamily" Value="{StaticResource IranSansFontFamily}"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ComboBox}"> 
       <Grid> 
       <ToggleButton 
        Name="ToggleButton" 
        Grid.Column="2" 
        ClickMode="Press" 
        Focusable="false" 
        IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}" 
        Template="{StaticResource ComboBoxToggleButton}"> 
       </ToggleButton> 
       <ContentPresenter 
        Name="ContentSite" 
        HorizontalAlignment="Left" 
        Margin="3,3,23,3" 
        VerticalAlignment="Center" 
        Content="{TemplateBinding SelectionBoxItem}" 
        ContentTemplate="{StaticResource SelectionBoxTextTemplate}" 
        ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" 
        IsHitTestVisible="False"/> 

回答

0

可以使用自定義模板選擇,看起來像這樣:N

enter image description here

+0

謝謝,我使用這個,但得到錯誤:'DisplayMemberPath使用時Cann'set SelectedItemTemplate' –

+0

DisplayMemberPath指定要顯示的屬性的名稱。既然你有SelectedItemTemplate,你可以在其綁定中指定屬性名稱。所以,而不是 set netaholic

+0

我設置它,但再次出現錯誤 –

0

您:

public class ComboBoxItemTemplateSelector : DataTemplateSelector 
    { 
     public DataTemplate SelectedItemTemplate { get; set; } 
     public DataTemplate ItemTemplate { get; set; } 
     public override DataTemplate SelectTemplate(object item, DependencyObject container) 
     { 
      bool selected = false; 
      FrameworkElement fe = container as FrameworkElement; 
      if (fe != null) 
      { 
       DependencyObject parent = fe.TemplatedParent; 
       if (parent != null) 
       { 
        ComboBox cbo = parent as ComboBox; 
        if (cbo != null) 
         selected = true; 
       } 
      } 
      if (selected) 
       return SelectedItemTemplate; 
      else 
       return ItemTemplate; 
     } 
    } 

而且在XAML:

<ComboBox Name="cb" Height="28"> 
      <ComboBox.ItemTemplateSelector> 
       <local:ComboBoxItemTemplateSelector> 
        <local:ComboBoxItemTemplateSelector.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding}" FontFamily="Comic Sans MS"/> 
         </DataTemplate> 
        </local:ComboBoxItemTemplateSelector.ItemTemplate> 
        <local:ComboBoxItemTemplateSelector.SelectedItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding}" FontFamily="Arial Black"/> 
         </DataTemplate> 
        </local:ComboBoxItemTemplateSelector.SelectedItemTemplate> 
       </local:ComboBoxItemTemplateSelector> 
      </ComboBox.ItemTemplateSelector> 
     </ComboBox> 

結果使用IsSelected屬性上的觸發器工作。示例見this answer。它適用於ListBox,但也適用於ComboBox。