WPF DataGrid与现有RowStyle的行特定上下文菜单

时间:2014-05-19 21:35:32

标签: c# wpf datagrid contextmenu

我正在尝试向我的WPF数据网格添加一个特定于每一行的上下文菜单,因为它的项目需要依赖于该行的DataContext。例如,如果我知道该行尚未编辑,则可能会禁用“保存”。

我正在查看Create contextmenus for datagrid rows的已接受答案,并尝试将其调整为我正在使用的现有xaml,但我不知道如何在现有的RowStyle之上使用此解决方案。

如果我复制并粘贴上下文菜单代码一切正常,但我已经为RowStyle提供了这个:

 <DataGrid.RowStyle>
   <Style TargetType="{x:Type DataGridRow}">
     <Style.Triggers>
       <Trigger Property="AlternationIndex" Value="1">
         <Setter Property="Background" Value="#eed3f7" />
       </Trigger>
   [...]
     </Style.Triggers>
   </Style>
 </DataGrid.RowStyle>

我不明白如何融入:

<DataGrid RowStyle="{StaticResource DefaultRowStyle}"/>

请帮忙!

1 个答案:

答案 0 :(得分:1)

我猜你已经看了很长时间以至于你看不到树木了。在您的关联答案中,有Style

<Style x:Key="DefaultRowStyle" TargetType="{x:Type DataGridRow}">
    <Setter Property="ContextMenu" Value="{StaticResource RowMenu}" />
</Style>

您说您无法使用它,因为您有自己想要应用的Style ...但上面的Style只有一个Setter,所以没有什么可以阻止您将Setter复制到Style

 <DataGrid.RowStyle>
   <Style TargetType="{x:Type DataGridRow}">
    <Setter Property="ContextMenu" Value="{StaticResource RowMenu}" /><!--<<<<<<<<-->
     <Style.Triggers>
       <Trigger Property="AlternationIndex" Value="1">
         <Setter Property="Background" Value="#eed3f7" />
       </Trigger>
   [...]
     </Style.Triggers>
   </Style>
 </DataGrid.RowStyle>

或者,您可以将Style基于DefaultRowStyle

 <DataGrid.RowStyle>
   <Style TargetType="{x:Type DataGridRow}" BasedOn="DefaultRowStyle">
     <Style.Triggers>
       <Trigger Property="AlternationIndex" Value="1">
         <Setter Property="Background" Value="#eed3f7" />
       </Trigger>
   [...]
     </Style.Triggers>
   </Style>
 </DataGrid.RowStyle>