[UWP]自定义控件可视化状态不工作



我在我的windows 10 UWP应用程序中创建了一个自定义控件CustomControl1

public sealed class CustomControl1 : ButtonBase
{
    public CustomControl1()
    {
        this.DefaultStyleKey = typeof(CustomControl1);
    }
}

Generic.xaml

中的默认样式
<Style TargetType="local:CustomControl1" >
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:CustomControl1">
                <Border>
                    <TextBlock x:Name="textBlock" Text="This is a text block"/>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="VisualStateGroup">
                            <VisualState x:Name="Normal"/>
                            <VisualState x:Name="PointerOver">
                                <VisualState.Setters>
                                    <Setter Target="textBlock.Foreground" Value="Red"/>
                                </VisualState.Setters>
                            </VisualState>
                            <VisualState x:Name="Pressed">
                                <VisualState.Setters>
                                    <Setter Target="textBlock.TextBlock" Value="Blue"/>
                                </VisualState.Setters>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

问题是TextBlock的前景不改变为Red时,鼠标也不改变为Blue时,按下。但如果我改变CustomControl1的基类Button它工作良好。

public sealed class CustomControl1 : Button
{
    public CustomControl1()
    {
        this.DefaultStyleKey = typeof(CustomControl1);
    }
}

这两种情况有什么不同?

因为Button具有您使用的视觉状态,而ButtonBase没有。当你为ButtonBase编写那个模板时,控件本身不会激活任何视觉状态因此你的文本颜色不会改变。按钮,而另一方面,颜色改变。

最新更新