我想附加一個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