原文:
【WPF】在MenuItem中下划线“_”显示不正常
MenuItem的Header显示文字时发现一个问题,字符串中的第一个下划线“_”不能显示。如果该下划线前面是一个英文字母,则下划线会跑到该字母下方。(是中文汉字则不会)
查到原因是第一个下划线“_”被转义为了MenuItem的快捷键。。。
因为Header的值是绑定到列表中元素的某个属性的值的,在该属性值前面加@也没法阻止转义,最后想到的办法是把MenuItem的内部显示换成TextBlock控件。
下面是用MenuItem做查看“最近打开”的文件的例子。RecentFilesList列表是数据源。根据业务需要填充该列表即可。
<MenuItem Header="最近打开" ItemsSource="{Binding Path=RecentFilesList}"> <MenuItem.ItemContainerStyle> <Style> <Setter Property="MenuItem.Header" Value="{Binding Path=SpacePlanName}" /> <!--<Setter Property="MenuItem.ItemsSource" Value="{Binding Path=Items}" />--> <!--<Setter Property="MenuItem.Icon" Value="{Binding Path=Icon}" />--> <!--<Setter Property="MenuItem.IsCheckable" Value="{Binding Path=IsCheckable}" />--> <!--<Setter Property="MenuItem.IsChecked" Value="{Binding Path=IsChecked,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />--> <Setter Property="MenuItem.Command" Value="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.OpenRecentFilesCommand}" /> <Setter Property="MenuItem.CommandParameter" Value="{Binding Path=SpacePlanId}"/> <!--<Setter Property="MenuItem.InputGestureText" Value="{Binding Path=InputGestureText}"/>--> <!--<Setter Property="MenuItem.ToolTip" Value="{Binding Path=ToolTip}" />--> <Setter Property="MenuItem.HeaderTemplate"> <Setter.Value> <DataTemplate> <TextBlock Text="{Binding Header,RelativeSource={RelativeSource AncestorType={x:Type MenuItem},Mode=FindAncestor}}"/> </DataTemplate> </Setter.Value> </Setter> <Style.Triggers> <DataTrigger Binding="{Binding Path=IsSeparator}" Value="true"> <Setter Property="MenuItem.Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type MenuItem}"> <Separator Style="{DynamicResource {x:Static MenuItem.SeparatorStyleKey}}" /> </ControlTemplate> </Setter.Value> </Setter> </DataTrigger> </Style.Triggers> </Style> </MenuItem.ItemContainerStyle> </MenuItem>