WPF的DataGrid属实麻烦,找了半天才找到正确的方法,留作笔记

        for (int i = 0; i < this.Data3.Items.Count; i++)
        {
            DataRowView drv = Data3.Items[i] as DataRowView;
            Data3.UpdateLayout();
            DataGridRow row = (DataGridRow)this.Data3.ItemContainerGenerator.ContainerFromIndex(i);
            if (i == 1)
            {

                DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(row);
                DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(1);
                Uri uri = new Uri("https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=187114331,1224108843&fm=26&gp=0.jpg");
                BitmapImage bimg = new BitmapImage(uri);
                cell.Background = new ImageBrush(bimg);
                cell.Foreground = new SolidColorBrush(Colors.Red);
            }
        }


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

            return childContent;
        }

Per Aspera Ad Astra