0

我在 DataGridColumn 上创建了自己的自定义附加属性 - utility:ADPs.IsCellSelected 以指示是否在列中选择了任何单元格。我对行做了类似的事情,效果很好。现在我想使用这个属性来改变整个列,例如背景属性,如:

         <DataGridTemplateColumn x:Name="MyColumn" Header="Test">
         <DataGridTemplateColumn.CellStyle>
            <Style TargetType="DataGridCell" BasedOn="{StaticResource BaseCell}">
               <Setter Property="Background" Value="Black"/>
            </Style>
         </DataGridTemplateColumn.CellStyle>

         <DataGridTemplateColumn.CellTemplate>
            <DataTemplate x:Uid="DataTemplate_3">
               <TextBlock x:Name="trg" Text="some text" />
               <DataTemplate.Triggers>
                  <Trigger SourceName="MyColumn" Property="utilities:ADPs.IsCellSelectedColumn" Value="True">
                     <Setter TargetName="trg" Property="Background" Value="Red"/>
                  </Trigger>
               </DataTemplate.Triggers>
            </DataTemplate>
         </DataGridTemplateColumn.CellTemplate>
         </DataGridTemplateColumn>

但是 VS 显示错误“无法识别名称 MyColumn。”。知道如何从“单元格”访问我新附加的 DataGridColumn 属性吗?

编辑:可能我不知道我的意图是什么,因为:“DataTemplate 有自己的 NameScope,因此您不能使用 ElementName 引用 DataTemplate 之外的元素。此外,DataGridTemplateColumn 不是 UIElement 并且不在 VisualTree 中,因此 DataGridTemplateColumn 不是父级在 DataTemplate 中定义的元素。DataGridTemplateColumn 仅用于定义列。DataGrid 然后根据定义生成标题、行和单元格,但 DataGridColumns 永远不会被呈现。 关联

4

1 回答 1

0

而不是用选定的单元格更改整个列的背景属性,我只更改列标题背景属性。我在 DataGridColumnHeader 上使用我的自定义附加属性-实用程序:ADPs.IsCellSelected 然后高亮标题

<DataGridTemplateColumn.HeaderStyle>
   <Style TargetType="DataGridColumnHeader">
      <Style.Triggers>
         <Trigger Property="utilities:ADPs.IsCellSelected" Value="True">
            <Setter Property="Background" Value="Red"/>
         </Trigger>
      </Style.Triggers>
   </Style>
</DataGridTemplateColumn.HeaderStyle>
于 2017-11-10T09:20:23.013 回答