2012-02-22 37 views
10

我遇到了一个问题,我有一个DataGridColumnHeader以下划线作为内容接收文本,第一个下划线是隐藏的,除非按下alt(“data_grid_thing”显示为'datagrid_thing“ )我搜索了一下,发现了一些解决这个问题的标签,因为如果你把RecognizesAccessKey设置为false,那么这个文本就不会被认为是'AccessText'(但是这对DataGridColumnHeader不起作用,因为它删除了所有其他的样式,所以,而不是其中的文本标题,我只是用文本的空白,我尝试使用BasedOn属性以及没有效果DataGridColumnHeader中的第一个下划线被删除

我打开解决方案要么通过C#方面(以某种方式修改RecognizesAccessKey属性findi可能是ContentPresenter),或者通过修改XAML(找出保留默认样式的方式)。

我的XAML看起来是这样的:

<Style x:Key="DataGridColumnHeaderStyle" BasedOn="{StaticResource {x:Type DataGridColumnHeader}}" TargetType="{x:Type DataGridColumnHeader}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="DataGridColumnHeader"> 
        <Border> 
         <ContentPresenter 
          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
          VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
          RecognizesAccessKey="False" /> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

谢谢!

+0

啊,我忘了这个链接:http://stackoverflow.com/questions/40733/disable-wpf-label-accelerator-key-text-underscore-is-missing这是最接近的解决方案我可以找到,解决原来的问题,但造成我上面提到的造型问题。 – Stuart 2012-02-22 22:17:21

+0

不能真正重现这一点,似乎没有在未修改的DataGrid中对我进行文字转换... – 2012-02-22 22:18:25

+0

[WPF listbox。在字符串中跳过下划线符号](http://stackoverflow.com/questions/4601801/wpf-listbox-skip-underscore-symbols-in-strings) – phoog 2012-02-22 22:19:48

回答

8

blog post说,你可以通过加倍它逃避下划线:"data__grid_thing"

另一种方法可以接受的答案被发现this question

+1

字符串的修改可悲的是不是一种选择。 – Stuart 2012-02-23 00:35:43

+1

@Stuart在链接中建议如何在TextBlock中显示字符串? – phoog 2012-02-23 01:02:19

+0

是的,那工作!谢谢!由于其他一些代码,它有点不雅,但并不可怕。 – Stuart 2012-02-23 02:37:36

7

这是因为ACCESSKEY处理。只需编写一个像这样的事件处理程序来临时转义datagrid头部中的下划线。

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
{ 
    string header = e.Column.Header.ToString(); 

    // Replace all underscores with two underscores, to prevent AccessKey handling 
    e.Column.Header = header.Replace("_", "__"); 
}