2012-02-22 67 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("_", "__"); 
}