2013-02-16 44 views
0

Im新的WPFWPF Datagrid:如何以編程方式更改單個單元格的邊框厚度?

我試圖根據列和行索引更改單個單元格的邊框。 到目前爲止,我已經有了獲取列和行索引的代碼。

現在我需要得到「該單元格」,並改變其邊界..

這是我的代碼,但它不工作:

我從網上這種方法:

public static T GetVisualChild<T>(Visual parent) where T : Visual 
    { 
     T child = default(T); 
     int numVisuals = VisualTreeHelper.GetChildrenCount(parent); 
     for (int i = 0; i < numVisuals; i++) 
     { 
      Visual v = (Visual)VisualTreeHelper.GetChild(parent, i); 
      child = v as T; 
      if (child == null) 
       child = GetVisualChild<T>(v); 
      else 
       break; 
     } return child; 
    } 

那麼這個地方我需要更改單元格屬性..

  int rows = 0; 
      int col = 0; 
     while (col < myDG.Columns.Count) 
     { 
      rows = 0; 
      while (rows < myDG.Items.Count) 
      { 
       DataGridRow row = (DataGridRow)myDG.ItemContainerGenerator.ContainerFromIndex(rows); 

       if (row != null) 
       { 

        DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(row); 
        DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(col); 

        cell.BorderThickness = new Thickness (2,2,2,2); 
        cell.BorderBrush= Brushes.Black; 


       rows++; 
      } 
      col++; 
     } 

任何想法?在此先感謝

回答

2

儘量避免在您的WPF應用程序中的代碼。傾向於將厚度屬性設置爲datacontext上的綁定屬性。

然後您可以通過設置valueconverter將此值轉換爲該屬性的有效值。

這裏是一個非常簡單的例子: http://wpftutorial.net/DataBindingOverview.html

所以,如果你是新來WPF嘗試搜索一些視頻的約MVVM。
Laurent Bignon做了幾個優秀的人來解釋整個概念

+0

我不太熟悉XAML編碼,所以儘可能我試圖在c#中做它,但感謝您的迴應。我稍後再嘗試。 – nfinium 2013-02-16 08:01:49

+1

如果你不想深入xaml,你最好堅持使用winforms。 WPF的優點是您可以使用數據綁定,並將您的表單與所有代碼分離。這樣你可以提高代碼的可測試性。我知道WPF有一個很大的學習曲線,如果你想正確實施它,但事後你會獲得好處 – JMan 2013-02-16 08:04:17

+0

同意@Jeroen,不僅是MVVM更清潔,它也比我見過的任何其他東西都更簡單。最後,你只有簡單,簡單的屬性,在你的ViewModel中有'INotifyPropertyChanged',在你的Views中有'{Binding }'。 – 2013-02-16 08:33:19

相關問題