在我的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/

10-10 16:07