在 AttachedProperty 中访问 DataGrid.RowStyle

Access DataGrid.RowStyle in AttachedProperty

XAML:

<DataGrid ItemsSource="{Binding Source={StaticResource Lines}}"                      
          uiwpf:DataGridExtensions.CanExportToExcel="True">
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Setter Property="ContextMenu" Value="{StaticResource RowContextMenu}" />
        </Style>
    </DataGrid.RowStyle>
    ...
</DataGrid>

附加属性:

private static void CanExportToExcelChanged(
    DependencyObject d, 
    DependencyPropertyChangedEventArgs e)
{
    //Just my way of secure casting DependencyObject -> DataGrid
    if(d is DataGrid dataGrid)
    {
        Debug.Assert(dataGrid.RowStyle != null, "Why is this null?");
    }
}

问题:正在触发断言 - 为什么?

这可能是在 DataGrid 上设置属性的顺序。

一般来说(我不知道有什么例外,但我不想声称没有任何)属性是按照它们的顺序设置的在 XAML 中重新定义。因此,在设置 DataGrid.RowStyle 之前,您的 DataGridExtensions.CanExportToExcel 将设置为 True

您可以通过删除当前对 uiwpf:DataGridExtensions.CanExportToExcel="True" 的调用并输入:

来对此进行测试
<uiwpf:DataGridExtensions.CanExportToExcel>True</uiwpf:DataGridExtensions.CanExportToExcel>

在你设置之后<DataGrid.RowStyle>

为了使附加的 属性 健壮,您可能需要使用 CanExportToExcelChangedRowStyle 属性 上设置绑定(并在 属性 上再次删除它 CanExportToExcel 设置为 False).