解決WPF中DataGrid的列表頭不顯示下劃線的問題

今天在我自己寫的一個WPF程序中執行sql語句查詢Oracle數據庫時,發生一個很奇怪的錯誤,對於我輸入的列名,一直提示標識符錯誤。

我是先根據select *查出來的列名,然後執行上圖中選中的語句,一直報錯。去網上搜都是說與oracle的關鍵字衝突了,要加雙引號。但是加了之後,仍然報一樣的錯誤,沒有效果。

實在想不出解決辦法,於是我用Toad看了一下表結構,發現這裏面的LEVELCODE、SYSTEMCODE等列,其列名實際上是LEVEL_CODE、SYSTEM_CODE,也就意味着問題在於列名錯了。

然後我通過調試我的程序發現,查詢出來的DataTable中列名是有下劃線的,但是交給DataGrid控件顯示時,所有列名中的第一個下劃線都沒了。經檢查發現,是DataGrid把_及後面的第一個字符當快捷鍵處理了,按住ALT鍵時,能看到後面一個字符下面出現了下劃線。

找到問題後,就開始解決問題。在網上搜了一下,都說要把ContentPresenter的RecognizesAccessKey設爲false就好了,但實際試了網上找到的所有辦法,都沒有解決問題。最後,還是隻能自己來想辦法解決。

經過不斷的嘗試,終於發現了一個非常簡單的解決辦法,將如下代碼加入到DataGrid的父級元素的Resources中,或者乾脆放到App.xaml中即可。

<Style TargetType="DataGridColumnHeader">
	<Setter Property="ContentTemplate">
		<Setter.Value>
			<DataTemplate>
				<TextBlock Text="{Binding}"></TextBlock>
			</DataTemplate>
		</Setter.Value>
	</Setter>
</Style>

這是針對列表頭的,行表頭只需把TargetType換成DataGridRowHeader即可。

這個解決方法的原理就是將生成表頭的模板替換掉,替換成TextBlock,TextBlock不像ContentPresenter那樣會去識別什麼快捷鍵。

最後,鄙視下微軟,什麼鬼設計。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章