从CellTemplate中的DataTrigger访问DataGridColumn属性

时间:2017-11-09 15:22:32

标签: triggers attached-properties datagridtemplatecolumn datagridcolumn

我在DataGridColumn上创建了自己的自定义附加属性 - utilities: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显示错误&#34;名称MyColumn无法识别。&#34;。知道如何从&#34; cells&#34;?中访问我新添加的DataGridColumn属性。

编辑: 可能我认为可能是我想要的,因为: &#34; DataTemplate有自己的NameScope,因此您无法使用ElementName引用DataTemplate外部的元素。此外,DataGridTemplateColumn不是UIElement,也不在VisualTree中,因此DataGridTemplateColumn不是DataTemplate中定义的元素的父级。 DataGridTemplateColumn仅用于定义列。然后,DataGrid根据定义生成标题,行和单元格,但DataGridColumns永远不会被渲染。&#34; link

1 个答案:

答案 0 :(得分:0)

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

<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>