使用VS 2010我計劃製作幾個數據網格模板列,但它們都將包含一個文本塊,我希望它們在排序,篩選,編輯等方面的行爲與文本列相同(例如,一列在一個堆棧面板中有一個文本塊和一個圖像,但是在行爲上它應該完全是關於文本的。)如何在WPF中重用自定義datagrid列代碼?
當使用模板列時,我已經瞭解到,與普通文本單元相關的許多功能必須重做。例如,爲了使文本編輯,必須提供像一個單元格編輯模板:
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox
FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"
Text="{Binding Path=SomeProperty, Mode=TwoWay, UpdateSourceTrigger=LostFocus}">
</TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
(而你還必須處理網格事件,以確保它的行爲像一個正常的文本框,像自動開始編輯模式,如果用戶按下一個鍵,或標籤到單元格等)
所以我的問題是,什麼是最好的方式(如果有的話),以避免必須明確寫入此代碼(以及用於排序,複製,過濾,等像textcell,對於每個模板列代碼創建這樣?我假設它是不好的做法被複制的代碼的頁面的一半價值爲每列,其中唯一的差異可能綁定的屬性名稱和視覺改變了一把。
我對此感到沮喪,並且對WPF一般。我已經沖刷網頁,我已經試過裝飾器,我已經試過繼承一個DataGrid列,我已經嘗試定義數據模板的用戶控件,並且一切似乎都失敗,一些討厭的「疑難雜症」。這是關於我以不同的細節詢問的第三個問題,只有最少的迴應。應該不是這樣很難搞清楚如何實現的東西基本上都是榮耀的文本列,而無需徹底改造整個車輪每一次和在每一個方面。至少在我的愚見中。
你過於複雜這一切太多。你爲什麼不只是設置了'CellStyle'的相關列,並覆蓋了'DataGridCell.Template'呢?您也可以將這些模板定義爲資源並重用它們。這樣,你就可以保留'DataGridTextColumn'而不必自己實現它。 –
聽起來不錯 - 你能給我一些代碼來處理嗎?例如,您是否可以告訴我如何使用單元格樣式來修改現有的'DataGridTextColumn',使其顯示文本以及旁邊的圖像? – Tekito