我正在尝试在我的一个组合框元素上附加一个数据触发器。触发器应读取 DataGridTextColumn(组合框的祖先)的附加属性并据此做出决定。现在的问题是 DataGridTextColumn 不是 Visual Tree 的一部分,所以我无法通过 RelativeSource Ancestor 获取它。这是示例代码。
<ComboBox Name="cmbFilter" DisplayMemberPath="CategoryName">
<ComboBox.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridTextColumn}},
Path=Header}"
Value="Id">
<Setter Property="Control.Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
任何人都可能提出一些替代方案
编辑:
@denis我不太了解您的解决方案,所以让我详细解释一下。我正在开发一个通用过滤器,它适用于所有需要过滤功能的 DataGrid。DataGrid 定义将通过在 DataGrid 上指定自定义附加属性“IsFilterable”来指定是否要过滤。各个 DataGridColum 将通过在 DataGridColumn 上指定“FilterDisplayType”来指定他们想要的过滤器类型(组合框或文本框)。除了上述之外,DataGrid 将一无所知。然后,过滤器将根据 DataGrid 和 DataGridColumn(所有类型的列)上的上述附加属性来处理所有功能。