Я знаю, что это старая тема, но я нашел решение этой проблемы . Я был в состоянии использовать
Предложение Аланд Ли, найденное здесь . Это не так универсально, как в CSS, но если вы знаете тип родительского элемента, это прекрасно работает даже в стиле .
Вот пример того, как я его использовал. У меня есть элемент управления TextBox, который подсвечивается «цветом подсветки», когда он имеет фокус. Кроме того, я хотел, чтобы связанный с ним элемент управления Label также загорался, когда TextBox имел фокус. Поэтому я написал Trigger для элемента управления Label, который включил его аналогично элементу управления TextBox. Этот триггер запускается пользовательским вложенным свойством IsFocusedByProxy. Затем мне нужно было привязать IsFocusedByProxy метки к IsFocused TextBox. Поэтому я использовал эту технику:
<Grid x:Name="MaxGrid">
<Label x:Name="MaxLabel"
Content="Max:"
c5:TagHelper.IsFocusedByProxy="{Binding
Path=Children[1].IsFocused,
RelativeSource={RelativeSource AncestorType=Grid}}"
/>
<c5:TextBoxC5Mediator x:Name="MaxTextBox"
DataContext="{Binding ConfigVm.Max_mediator}" />
</Grid>
В этот момент вы можете подумать, что это не лучше, чем просто использование ElementName в Binding. Но разница в том, что теперь я могу переместить эту привязку в стиль для повторного использования:
<Setter Property="C5_Behaviors:TagHelper.IsFocusedByProxy"
Value="{Binding Path=Children[1].IsFocused,
RelativeSource={RelativeSource AncestorType=Grid}}" />
И теперь я могу, когда у меня есть View, полный этих вхождений, например так (я настроил необходимые стили, чтобы они применялись неявно, поэтому не отображается разметка, которая устанавливает стили):
<Grid x:Name="MaxGrid">
<Label x:Name="MaxLabel"
Content="Max:" />
<c5:TextBoxC5Mediator x:Name="MaxTextBox"
DataContext="{Binding ConfigVm.Max_mediator}" />
</Grid>
<Grid x:Name="MinGrid">
<Label x:Name="MinLabel"
Content="Min:" />
<c5:TextBoxC5Mediator x:Name="MinTextBox"
DataContext="{Binding ConfigVm.Min_mediator}" />
</Grid>
<Grid x:Name="StepFactorGrid">
<Label x:Name="StepFactorLabel"
Content="Step Factor:" />
<c5:TextBoxC5Mediator x:Name="StepFactorTextBox"
DataContext="{Binding ConfigVm.StepFactor_mediator}" />
</Grid>
<!-- ... and lots more ... -->
Что дает мне эти результаты :
Перед тем как у любого текстового поля есть фокус:
С различными текстовыми полями, получающими фокус: