我将VisualStateManager.VisualStateGroups定义如下:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="PopupStates">
<VisualState x:Name="PopupClosed">
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetName="ContextPopup"
Storyboard.TargetProperty="IsOpen">
<DiscreteBooleanKeyFrame KeyTime="0:0:0.25"
Value="False" />
</BooleanAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="rootGrid"
Storyboard.TargetProperty="(Panel.Background)">
<DiscreteObjectKeyFrame KeyTime="0:0:0.25" Value="{DynamicResource BrushIconComboBox_Popup_Closed_Background}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="PopupOpen">
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetName="ContextPopup"
Storyboard.TargetProperty="IsOpen">
<DiscreteBooleanKeyFrame KeyTime="0:0:0.25"
Value="True" />
</BooleanAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="rootGrid"
Storyboard.TargetProperty="(Panel.Background)">
<DiscreteObjectKeyFrame KeyTime="0:0:0.25" Value="{DynamicResource BrushIconComboBox_Popup_Open_Background}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
在Style声明中,如果单击列表框项(即通过鼠标操作选择),我想调用VisualStateManager.GoToState“PopupClosed”。我还没有找到VisualStateManager.GoToState可以与触发器组合的示例,例如:
<Style.Triggers>
<Trigger Property="IsSelected" Value="true">
... VisualStateManager.GoToState declaration ....
</Trigger>
</Style.Triggers>
有什么方法可以做到这一点吗?任何帮助都很感激。
1条答案
按热度按时间kx5bkwkv1#
不能从XAML调用方法,除非这些方法是事件/命令处理程序(委托)。必须从非XAML上下文显式调用方法。
VisualStates
通常由定义它们的控件来处理。如果这不是关于自定义控件,并且您需要更改可视状态转换行为或触发器,最干净的方法是扩展相关控件以私下实现状态转换。但是,使用VisualStateManager.GoToElementState允许从外部将控件转换为可视状态,例如从附加的
ListBoxItem.Selected
事件处理程序。