Hi people.
I have a DataGrid in WPF.
There are two columns in it.
All datas at the first column are a rectangle (I mean as Shape).
There is a button in the window, that when user hits the button, it fills the Rectangle of row 35, to Red.
But I don't know why VS gives me exception that it is nothing!
Would you please kindly help me on this?
What I have tried:
Code:<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:RectangleREF" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <DataGrid x:Name="DGEditing" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTemplateColumn Header="" IsReadOnly="True" Width="2*"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Rectangle RadiusX="5" RadiusY="3.5" Fill="Black"> </Rectangle> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTextColumn Header="Character" IsReadOnly="False" Width="22*" Binding="{Binding Path=CharacterName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> </DataGrid.Columns> </DataGrid> <Button Content="Button" HorizontalAlignment="Left" Margin="650,149,0,0" VerticalAlignment="Top" Height="91" Width="91" Click="Button_Click"/> </Grid> </Window>
Code:Class MainWindow Public Class TemporaryItemsClass Public Property Rct As Boolean Public Property CharacterName As String End Class Public TemporaryItems As New System.Collections.ObjectModel.ObservableCollection(Of TemporaryItemsClass) Sub New() InitializeComponent() For I As Integer = 1 To 1000 TemporaryItems.Add(New TemporaryItemsClass With { .Rct = False, .CharacterName = "Number" & I }) Next I DGEditing.ItemsSource = TemporaryItems End Sub Private Sub Button_Click(sender As Object, e As RoutedEventArgs) Dim row = TryCast(DGEditing.ItemContainerGenerator.ContainerFromIndex(35), DataGridRow) Dim cell As DataGridCell = GetCell(DGEditing, row, 0) Dim rectangle = TryCast(cell.Content, Rectangle) rectangle.Fill = Brushes.Red End Sub Private Function GetCell(dg As DataGrid, rowContainer As DataGridRow, column As Integer) As DataGridCell Dim returner If rowContainer IsNot Nothing Then Dim presenter = VisualTreeHelper.GetParent(rowContainer) Dim cell As DataGridCell = TryCast(dg.Columns(column).GetCellContent(presenter), DataGridCell) If cell IsNot Nothing Then returner = cell End If Return returner End Function End Class


Reply With Quote
