(см. Обновление в конце)
Чтобы ответить на мой собственный вопрос, основной проблемой с приведенным выше кодом была привязка.Это должно быть {Binding RelativeSource={RelativeSource TemplatedParent}, Path=Visibility}
.Также «скрытое» визуальное состояние не обязательно.например,
<VisualStateGroup x:Name="VisibilityStates"><VisualState x:Name="Visible">
<VisualState.Storyboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="ContentRoot" Storyboard.TargetProperty="Opacity"
From="0" To="1.0" Duration="0:0:1" />
</Storyboard>
</VisualState.Storyboard>
<VisualState.StateTriggers>
<windowsStateTriggers:EqualsStateTrigger Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Visibility}" EqualTo="Visible"/>
</VisualState.StateTriggers>
</VisualState>
</VisualStateGroup>
Этот метод включает редактирование шаблона элемента управления.Если вы не хотите этого делать, вы можете поместить VisualStateGroup
под первым элементом Grid (он не будет работать непосредственно под Page
) и иметь несколько анимаций, нацеленных на разные кнопки, а триггер поставить под элемент управления.от которого зависит видимость других кнопок.Например,
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="MultiSelect">
<VisualState x:Name="Checked">
<VisualState.Storyboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="buttonSelectAll" Storyboard.TargetProperty="Opacity"
From="0" To="1.0" Duration="0:0:0.3" />
<DoubleAnimation Storyboard.TargetName="buttonClearAll" Storyboard.TargetProperty="Opacity"
From="0" To="1.0" Duration="0:0:0.3" />
</Storyboard>
</VisualState.Storyboard>
<VisualState.Setters>
<Setter Target="buttonSelectAll.Visibility" Value="Visible" />
<Setter Target="buttonClearAll.Visibility" Value="Visible" />
</VisualState.Setters>
<VisualState.StateTriggers>
<windowsStateTriggers:EqualsStateTrigger Value="{Binding ElementName=buttonSelect, Path=IsChecked}" EqualTo="True"/>
</VisualState.StateTriggers>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
Обновление
Этого также можно добиться с помощью CompositionAnimations
с помощью Инструментария сообщества Windows