Took me a while to figure this out.
So I’m adding a context menu to rows of DataGrid.
This is the markup (taken from SavePoint):
<DataGrid Name="dgSavePoints" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="1"
AutoGenerateColumns="False" ItemsSource="{Binding SavePoints}"
AlternatingRowBackground="GhostWhite" AlternationCount="2" IsReadOnly="True" SelectionMode="Single" Margin="5" KeyUp="dgSavePoints_KeyUp">
<DataGrid.Resources>
<ContextMenu x:Key="DataRowContextMenu">
<MenuItem Name="mnuRestore" Header="Restore" Click="mnuRestore_Click" >
<MenuItem.Icon >
<Image Source="/SavePoint;component/Images/Restore.png" Width="20" Height="20"></Image>
</MenuItem.Icon>
</MenuItem>
<MenuItem Name="mnuDelete" Header="Delete" Click="mnuDelete_Click" >
<MenuItem.Icon >
<Image Source="/SavePoint;component/Images/Delete.png" Width="20" Height="20"></Image>
</MenuItem.Icon>
</MenuItem>
<MenuItem Name="mnuDeleteAll" Header="Delete all" Click="mnuDeleteAll_Click" >
<MenuItem.Icon >
<Image Source="/SavePoint;component/Images/DeleteAll.png" Width="20" Height="20" ></Image>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</DataGrid.Resources>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}" x:Name="styleForDataRow">
<Setter Property="ContextMenu" Value="{StaticResource DataRowContextMenu}">
</Setter>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Document" Binding="{Binding DocumentRelativePath}" Width="auto"></DataGridTextColumn>
<DataGridTextColumn Header="Project" Binding="{Binding ProjectName}" Width="auto"></DataGridTextColumn>
<DataGridTextColumn Header="Date Saved" Binding="{Binding DateSaved, StringFormat=d MMM yyyy HH:mm:ss}" Width="auto"></DataGridTextColumn>
<DataGridTextColumn Header="Description" Binding="{Binding Description}" Width="*"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
Now, see the the Image Source property ?
I was setting this manually to “Images/image.png”. Don’t do this! Instead, click on Source of a Properties pane, and select the image you want – it will set the correct path.
