diff --git a/src/Avalonia.Controls.DataGrid/DataGrid.cs b/src/Avalonia.Controls.DataGrid/DataGrid.cs
index 9b67c9b096..aaac3f8f9c 100644
--- a/src/Avalonia.Controls.DataGrid/DataGrid.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGrid.cs
@@ -32,6 +32,14 @@ namespace Avalonia.Controls
///
/// Displays data in a customizable grid.
///
+ [TemplatePart(DATAGRID_elementBottomRightCornerHeaderName, typeof(IVisual))]
+ [TemplatePart(DATAGRID_elementColumnHeadersPresenterName, typeof(DataGridColumnHeadersPresenter))]
+ [TemplatePart(DATAGRID_elementFrozenColumnScrollBarSpacerName, typeof(Control))]
+ [TemplatePart(DATAGRID_elementHorizontalScrollbarName, typeof(ScrollBar))]
+ [TemplatePart(DATAGRID_elementRowsPresenterName, typeof(DataGridRowsPresenter))]
+ [TemplatePart(DATAGRID_elementTopLeftCornerHeaderName, typeof(ContentControl))]
+ [TemplatePart(DATAGRID_elementTopRightCornerHeaderName, typeof(ContentControl))]
+ [TemplatePart(DATAGRID_elementVerticalScrollbarName, typeof(ScrollBar))]
[PseudoClasses(":invalid", ":empty-rows", ":empty-columns")]
public partial class DataGrid : TemplatedControl
{
diff --git a/src/Avalonia.Controls.DataGrid/DataGridCell.cs b/src/Avalonia.Controls.DataGrid/DataGridCell.cs
index e3f150f5c4..67183781d3 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridCell.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridCell.cs
@@ -13,6 +13,7 @@ namespace Avalonia.Controls
///
/// Represents an individual cell.
///
+ [TemplatePart(DATAGRIDCELL_elementRightGridLine, typeof(Rectangle))]
[PseudoClasses(":selected", ":current", ":edited", ":invalid")]
public class DataGridCell : ContentControl
{
diff --git a/src/Avalonia.Controls.DataGrid/DataGridRow.cs b/src/Avalonia.Controls.DataGrid/DataGridRow.cs
index a6faec752d..db5d428942 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridRow.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridRow.cs
@@ -21,6 +21,11 @@ namespace Avalonia.Controls
///
/// Represents a row.
///
+ [TemplatePart(DATAGRIDROW_elementBottomGridLine, typeof(Rectangle))]
+ [TemplatePart(DATAGRIDROW_elementCells, typeof(DataGridCellsPresenter))]
+ [TemplatePart(DATAGRIDROW_elementDetails, typeof(DataGridDetailsPresenter))]
+ [TemplatePart(DATAGRIDROW_elementRoot, typeof(Panel))]
+ [TemplatePart(DATAGRIDROW_elementRowHeader, typeof(DataGridRowHeader))]
[PseudoClasses(":selected", ":editing", ":invalid")]
public class DataGridRow : TemplatedControl
{
diff --git a/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs b/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs
index 49ca23d34c..a3dfa44fc9 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs
@@ -14,6 +14,12 @@ using System.Reactive.Linq;
namespace Avalonia.Controls
{
+ [TemplatePart(DATAGRIDROWGROUPHEADER_expanderButton, typeof(ToggleButton))]
+ [TemplatePart(DATAGRIDROWGROUPHEADER_indentSpacer, typeof(Control))]
+ [TemplatePart(DATAGRIDROWGROUPHEADER_itemCountElement, typeof(TextBlock))]
+ [TemplatePart(DATAGRIDROWGROUPHEADER_propertyNameElement, typeof(TextBlock))]
+ [TemplatePart(DataGridRow.DATAGRIDROW_elementRoot, typeof(Panel))]
+ [TemplatePart(DataGridRow.DATAGRIDROW_elementRowHeader, typeof(DataGridRowHeader))]
[PseudoClasses(":pressed", ":current", ":expanded")]
public class DataGridRowGroupHeader : TemplatedControl
{
diff --git a/src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs b/src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs
index 510072174f..03299bbf35 100644
--- a/src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs
+++ b/src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs
@@ -13,6 +13,7 @@ namespace Avalonia.Controls.Primitives
///
/// Represents an individual row header.
///
+ [TemplatePart(DATAGRIDROWHEADER_elementRootName, typeof(Control))]
[PseudoClasses(":invalid", ":selected", ":editing", ":current")]
public class DataGridRowHeader : ContentControl
{