【WPF】在MenuItem中下划线“_”显示不正常

本文介绍了解决WPF应用中MenuItem控件显示文本时遇到的问题:当文本以下划线开头时,该下划线会被转义为快捷键。通过使用TextBlock替换默认的Header显示方式来避免此问题,并提供了一个实例展示如何绑定数据源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值