【问题标题】:How to change font-family of Combobox SelectedItem?如何更改 Combobox SelectedItem 的字体系列?
【发布时间】:2015-09-14 06:12:45
【问题描述】:

我有 ComboBox 的样式。并为其设置 Font-family。

为项目设置字体,但不为选定项目设置。

<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"/>

【问题讨论】:

    标签: wpf xaml combobox


    【解决方案1】:

    您需要使用 IsSelected 属性上的触发器。有关示例,请参阅this answer。它适用于 ListBox,但也适用于 ComboBox。

    【讨论】:

      【解决方案2】:

      您可以使用自定义模板选择器,如下所示:

        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>
      

      结果:

      【讨论】:

      • 谢谢,我用这个,但得到错误:Cann't set SelectedItemTemplate while DisplayMemberPath is use
      • DisplayMemberPath 指定要显示的属性的名称。由于您有 SelectedItemTemplate 您可以在其绑定中指定属性名称。所以,而不是
      • 您能发布您的原始 xaml 吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多