Wpf Visual转换不按预期工作

时间:2018-06-07 11:01:02

标签: wpf datatemplate visualstatemanager

我正在尝试使用模板创建自定义按钮。 我写了这个模板:

<Style TargetType="Button" x:Key="Delete Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualStateGroup.Transitions>
                                <VisualTransition To="MouseOver"
                                    GeneratedDuration="0:0:1"/>
                                <VisualTransition To="Pressed"
                                    GeneratedDuration="0:0:1"/>
                                <VisualTransition From="Presse To="MouseOver"
                                    GeneratedDuration="0:0:1"/>
                                <VisualTransition To="Normal"
                                    GeneratedDuration="0:0:1"/>
                                <VisualTransition To="Disabled"
                                    GeneratedDuration="0:0:0.1"/>
                                <VisualTransition From="Disabled"
                                    GeneratedDuration="0:0:0.1"/>
                            </VisualStateGroup.Transitions>
                            <VisualState x:Name="Normal" />
                            <VisualState x:Name="MouseOver">
                                <Storyboard>
                                    <ColorAnimation Storyboard.TargetName="VisPres"
                                     Storyboard.TargetProperty="Stroke.Color"
                                     To="PaleVioletRed"/>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Pressed">
                                <Storyboard>
                                    <ColorAnimation Storyboard.TargetName="VisPres"
                                       Storyboard.TargetProperty="Fill.Color"
                                       To="DarkRed">
                                    </ColorAnimation>
                                    <ColorAnimation Storyboard.TargetName="VisPres"
                                       Storyboard.TargetProperty="Stroke.Color"
                                       To="Red"/>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Disabled">
                                <Storyboard>
                                    <ColorAnimation Storyboard.TargetName="VisPres"
                                      Storyboard.TargetProperty="Fill.Color"
                                      To="Gray"/>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <Ellipse x:Name="VisPres" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Fill="Red" 
                       Stroke="Black" StrokeThickness="4">
                    </Ellipse>
                    <ContentPresenter HorizontalAlignment="Center"
                        VerticalAlignment="Center"
                        Margin="4,4,4,4"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
   </Setter>
</Style>

模板看起来很好,但所有的动画过渡都需要1次,即使我说他们应该在视觉过渡中花费不同的时间。 有人可以帮我吗? 非常感谢你!

编辑:这是另一个模板,即使增加的时间也不会起作用

<Style TargetType="Button">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Grid>
                                <VisualStateManager.VisualStateGroups>
                                    <VisualStateGroup x:Name="CommonStates">
                                        <VisualStateGroup.Transitions>
                                            <VisualTransition To="MouseOver"
                                                              GeneratedDuration="0:0:0.2"/>
                                            <VisualTransition To="Pressed"
                                                              GeneratedDuration="0:0:0.01"/>
                                            <VisualTransition From="Pressed" To="MouseOver"
                                                              GeneratedDuration="0:0:0.01"/>
                                            <VisualTransition To="Normal"
                                                              GeneratedDuration="0:0:2"/>
                                            <VisualTransition To="Disabled"
                                                              GeneratedDuration="0:0:0"/>
                                            <VisualTransition From="Disabled" To="Normal"
                                                              GeneratedDuration="0:0:2"/>
                                        </VisualStateGroup.Transitions>
                                        <VisualState x:Name="Normal"/>
                                        <VisualState x:Name="MouseOver">
                                            <Storyboard>
                                                <ColorAnimation Storyboard.TargetName="LightCol"
                                                                Storyboard.TargetProperty="Color"
                                                                To="#BCFF8E"/>
                                                <ColorAnimation Storyboard.TargetName="ShadCol"
                                                                Storyboard.TargetProperty="Color"
                                                                To="#A1CC84"/>
                                            </Storyboard>
                                        </VisualState>
                                        <VisualState x:Name="Pressed">
                                            <Storyboard>
                                                <ColorAnimation Storyboard.TargetName="LightCol"
                                                                Storyboard.TargetProperty="Color"
                                                                To="#72E324"/>
                                                <ColorAnimation Storyboard.TargetName="ShadCol"
                                                                Storyboard.TargetProperty="Color"
                                                                To="#6CBF32"/>
                                            </Storyboard>
                                        </VisualState>
                                        <VisualState x:Name="Disabled">
                                            <Storyboard>
                                                <ColorAnimation Storyboard.TargetName="LightCol"
                                                                Storyboard.TargetProperty="Color"
                                                                To="Gray"/>
                                                <ColorAnimation Storyboard.TargetName="ShadCol"
                                                                Storyboard.TargetProperty="Color"
                                                                To="Gray"/>
                                            </Storyboard>
                                        </VisualState>
                                    </VisualStateGroup>
                                    <VisualStateGroup x:Name="FocusStates">
                                        <VisualState x:Name="Unfocused"/>
                                        <VisualState x:Name="Focused">
                                            <Storyboard>
                                                <ThicknessAnimation Storyboard.TargetName="Bord"
                                                                Storyboard.TargetProperty="BorderThickness"
                                                                To="2"
                                                                 Duration="0:0:0"/>
                                            </Storyboard>
                                        </VisualState>
                                    </VisualStateGroup>
                                </VisualStateManager.VisualStateGroups>
                                <Border x:Name="Bord" BorderBrush="Blue" BorderThickness="0">
                                    <Rectangle Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
                                        <Rectangle.Fill>
                                            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                                <GradientStop x:Name="LightCol" Color="#D7FFBC" Offset="0.499"/>
                                                <GradientStop x:Name="ShadCol" Color="#D5E5CA" Offset="0.501"/>
                                            </LinearGradientBrush>
                                        </Rectangle.Fill>
                                    </Rectangle>
                                </Border>
                                <ContentPresenter HorizontalAlignment="Center"
                                                VerticalAlignment="Center"
                                                Margin="4,4,4,4"/>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

0 个答案:

没有答案