【问题标题】:[UWP]Custom control visualstate not work[UWP]自定义控件视觉状态不起作用
【发布时间】:2015-10-08 10:27:34
【问题描述】:

我在我的 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);
    }
}

这两种情况有什么不同?

【问题讨论】:

    标签: xaml windows-10 uwp


    【解决方案1】:

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

    【讨论】:

    • 我记得所有的Control 在 WPF/Silverlight 中都有 MouseOver/Pressed 状态,为什么微软将它从 uwp 中删除?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 2011-10-17
    相关资源
    最近更新 更多