WPF中DataGrid内Label绑定文件名时下划线消失问题求助
WPF DataGrid Label绑定文件名丢失下划线问题
问题描述
在WPF项目的DataGrid中,通过DataGridTemplateColumn配置列展示FileName字段,使用Label绑定该字段同时设置ToolTip也绑定同一字段。代码如下:
<DataGridTemplateColumn Header="{Binding Data.ImageNameStrings, Source={StaticResource proxy}}" Width="50" MinWidth="48"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Label Content="{Binding FileName}"> <Label.ToolTip> <TextBlock Text="{Binding FileName}" Padding="6,2" Background="White" Foreground="#353535" FontSize="14"/> </Label.ToolTip> </Label> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
实际运行时,Label中的下划线会异常消失:单个下划线直接丢失,两个下划线只保留一个,但ToolTip中的TextBlock显示完全正常。
原因分析
WPF的Label控件默认会将内容中的下划线识别为**访问键(Access Key)**的标记——单个下划线会被当作快捷键的前缀(比如_File会显示为File且F下方有下划线,按Alt+F触发),所以纯下划线或多余的下划线会被自动处理;而TextBlock没有访问键解析逻辑,会原封不动显示所有字符。
解决方案
方案1:用TextBlock替代Label
如果不需要Label的访问键功能,直接改用TextBlock是最简单的方式:
<DataGridTemplateColumn Header="{Binding Data.ImageNameStrings, Source={StaticResource proxy}}" Width="50" MinWidth="48"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding FileName}"> <TextBlock.ToolTip> <TextBlock Text="{Binding FileName}" Padding="6,2" Background="White" Foreground="#353535" FontSize="14"/> </TextBlock.ToolTip> </TextBlock> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
方案2:保留Label并禁用访问键解析
如果必须使用Label,可以通过以下两种方式强制字符串原样显示:
方式A:设置ContentStringFormat
<Label Content="{Binding FileName}" ContentStringFormat="{}{0}"/>
这里{}{0}的第一个空括号是为了避免WPF把格式字符串开头的{识别为绑定标记。
方式B:显式使用AccessText并关闭ShowAccessKey
<Label> <AccessText Text="{Binding FileName}" ShowAccessKey="False"/> <Label.ToolTip> <TextBlock Text="{Binding FileName}" Padding="6,2" Background="White" Foreground="#353535" FontSize="14"/> </Label.ToolTip> </Label>
内容的提问来源于stack exchange,提问作者Ricky Chen
相关产品推荐
相关产品推荐

