Wpf 如何更改组合框SelectedItem的字体系列?
我有一个组合框的风格。并为其设置字体系列 为项目设置字体,但不为所选项目设置字体Wpf 如何更改组合框SelectedItem的字体系列?,wpf,xaml,combobox,Wpf,Xaml,Combobox,我有一个组合框的风格。并为其设置字体系列 为项目设置字体,但不为所选项目设置字体 <DataTemplate x:Key="SelectionBoxTextTemplate"> <TextBlock FontFamily="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}, Path=FontFamily}" Text="{Binding}"/&g
<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"/>
您可以使用自定义模板选择器,如下所示:
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属性上使用触发器。有关示例,请参见。它适用于列表框,但也适用于组合框。谢谢,我使用它,但出现错误:当DisplayMemberPath使用时,无法设置SelectedItemTemplate DisplayMemberPath指定要显示的属性的名称。由于选择了EditemTemplate,因此可以在其绑定中指定属性名称。那么,你可以发布你原来的xaml吗?