В моем окне есть несколько элементов управления GroupBox, каждый из которых содержит Grid Control. Для тех Grids я хочу присвоить стиль. Но только для тех гридов, которые находятся непосредственно в GroupBox, все другие гриды не должны быть затронуты.Стиль DataTrigger со ссылкой на Тип родительского элемента управления
Я пробовал следующее, что не работает, поскольку GetType() не является свойством.
<Style TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Parent.GetType()}" Value="{x:Type GroupBox}">
<!-- <Setter Property="..." Value="..."/> -->
</DataTrigger>
</Style.Triggers>
</Style>
Я нашел обходной путь, но это на самом деле не красивое решение, так как я должен изменить рамок группы:
<Style TargetType="GroupBox">
<Setter Property="Tag" Value="blub"/>
</Style>
<Style TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Parent.Tag, RelativeSource={RelativeSource Mode=Self}}" Value="blub">
<!-- <Setter Property="..." Value="..."/> -->
</DataTrigger>
</Style.Triggers>
</Style>
Очевидно, что я мог бы задать стиль для каждой сетки вручную, но я м, пытаясь избежать этого, так как их очень много. Надеюсь, вы сможете найти способ сделать первый пример работы.
Боюсь, вы ошибаетесь в этом. Мой код работает очень хорошо. Режим не относится к типу BindingMode, а относится к типу RelativeSourceMode. Я предполагаю, что вы не заметили фигурные скобки в RelativeSource = {RelativeSource Mode = Self}, которые делают режим «Свойство RelativeSource», а не одним из Binding. – PeterE 2010-12-12 13:52:52
@Peter: Вы правы. Эта горизонтальная прокрутка меня беспокоила, и я не замечал внутренних фигурных скобок, которые делают свойство «Mode» RelativeSource. Спасибо, что указали на ошибку! :-) – Nawaz 2010-12-12 14:06:37