我想附加一个datatrigger在我的一个combobox元素上。触发器应该读取DataGridTextColumn(组合框的祖先)的附加属性并根据该属性做出决定。现在问题是DataGridTextColumn不是Visual Tree的一部分,所以我无法通过RelativeSource祖先得到它。这里是示例代码。DataGridTextColumn DataTrigger
<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”来指定是否需要过滤。通过在DataGridColumn上指定“FilterDisplayType”,单个DataGridColum将指定他们想要的过滤器类型(组合框或文本框)。 DataGrid除了上述以外不会知道任何内容。所有的功能都将基于DataGrid和DataGridColumn(所有类型的列)上的附加属性由Filter过滤。
如何找到封闭的DataGridTextColumn。触发器甚至不支持绑定,如果我尝试在Trigger的Property属性上使用它,则会抛出XmlParseException,表示无法在Trigger的“Property”属性上设置绑定。 – Jatin 2012-04-10 12:50:31
你是怎么改变标题的,显然你是这样做的,否则你将不得不用触发器来回应它?我所暗示/通向的是,你可能可以在具有ComboBox相同属性绑定/触发作为页眉 – 2012-04-10 16:25:51
我为有误导对不起你。示例代码就是例子。实际上,DataGridTextColumn上有一个自定义的附加属性,我必须编写触发器。由于触发器将会使组合框无形的,它似乎是合乎逻辑定义组合框的样式触发。 – Jatin 2012-04-10 16:30:10