在 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>
。
为了使附加的 属性 健壮,您可能需要使用 CanExportToExcelChanged
在 RowStyle
属性 上设置绑定(并在 属性 上再次删除它 CanExportToExcel
设置为 False
).
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>
。
为了使附加的 属性 健壮,您可能需要使用 CanExportToExcelChanged
在 RowStyle
属性 上设置绑定(并在 属性 上再次删除它 CanExportToExcel
设置为 False
).