Чтобы достичь этого полностью в XAML (то есть без конвертера), вы можете использовать анимации на основе кефрейма, которые запускаются событиями CheckBox Checked и Unchecked.Обратите внимание, что это не Binding, и ничто не «отслеживает» состояние CheckBox, чтобы определить, должен ли GroupBox быть включен.Вот почему (как вы увидите в следующем примере) начальные состояния GroupBox и CheckBox должны быть установлены явно, чтобы анимация работала правильно.
Вот рабочий пример:
<Window ...>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<GroupBox
x:Name="targetGroupBox"
Grid.Row="0"
Header="My GroupBox"
IsEnabled="False"
>
<Button Content="Hello World" />
</GroupBox>
<CheckBox
Grid.Row="1"
Content="Toggle with animation"
IsChecked="True"
>
<CheckBox.Triggers>
<EventTrigger RoutedEvent="CheckBox.Checked">
<EventTrigger.Actions>
<StopStoryboard BeginStoryboardName="SetFalseStoryboard" />
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="CheckBox.Unchecked">
<EventTrigger.Actions>
<BeginStoryboard Name="SetFalseStoryboard">
<Storyboard>
<BooleanAnimationUsingKeyFrames
Storyboard.TargetName="targetGroupBox"
Storyboard.TargetProperty="IsEnabled"
AutoReverse="True"
BeginTime="0:0:0"
FillBehavior="HoldEnd"
>
<DiscreteBooleanKeyFrame Value="True" KeyTime="0:0:0" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</CheckBox.Triggers>
</CheckBox>
</Grid>
</Window>
Когда отображается это представление, кнопка внутри родительского GroupBox активна только тогда, когда «анимированный» флажок снят.Поскольку это не привязка, могут быть проблемы с производительностью, которые следует принимать во внимание, то есть преобразователь привязки, который выполняется многократно, может работать лучше, чем анимация на основе ключевых кадров, которая «проигрывается» повторно;Я не проводил никаких тестов производительности для проверки.
В прошлом я использовал подобные анимации редко, так как ненавижу писать и ссылаться на конвертеры для функциональности, которая, по моему мнению, должна быть встроена в WPF внекоробка.Однако в большинстве случаев лучшим выбором является конвертер, этот пример просто показывает, что в некоторых сценариях анимации на основе ключевых кадров можно использовать для достижения желаемого результата полностью в XAML.