在我的CustomControl中,我使用的是VisualStateManager,如下所示:
...
<ControlTemplate TargetType="{x:Type local:MyCustomControl}">
<Grid x:Name="rootGrid" >
<Grid.RowDefinitions>
<RowDefinition Height="65"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CheckStates">
<VisualState x:Name="Checked">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="toggleRegionContent"
Storyboard.TargetProperty="Height"
From="0"
To="{TemplateBinding ContentHeight}"
Duration="0:0:.7" />
<DoubleAnimation Storyboard.TargetName="arrowIcon"
Storyboard.TargetProperty="(Path.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"
From="0"
To="180"
Duration="0:0:.1" />
</Storyboard>
<VisualState>
<!-- Some other States -->
</VisualStateGroup>
</VisualStateManager>
<ToggleButton>
<!-- The Rest of the Control -->
我的问题现在是如何处理事件检查或由谁处理。单击ToggleButton时VisualStateManager是否自动切换状态。还是我必须给我的ToggleButton一个Checked事件并在背后的代码中分配按钮状态,如下所示:
VisualStateManager.GoToElementState(Control, "Checked", true);
谢谢你的帮助。
最佳答案
还是我必须给我的ToggleButton一个Checked事件并在背后的代码中分配按钮状态,如下所示:
是的,您的自定义控件负责使用VisualStateManager
类及其GoToState
方法设置控件的当前视觉状态。
您可以在MSDN上阅读有关此内容的更多信息:https://msdn.microsoft.com/en-us/library/ee330302(v=vs.110).aspx
关于c# - WPF/XAML VisualStateManager谁处理事件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42440605/