WinRT: 體驗ControlTemplate – 定義一個簡單的Button控制項範本

來源:互聯網
上載者:User

 

僅僅是一種非常簡單的Button控制項範本。不過顏色變化都是漸層的。Foreground,Background和Border設定和普通Button一樣,滑鼠指向時高亮色,點擊後顏色和IsEnabled為False的顏色可以通過修改XAML資源,定義在BtnPressed,BtnHighlighted和BtnDisabled資源中。當Button.IsEnabled為False時,Background變成Transparent,然後Foreground和BorderBrush會被設定成BtnDisabled資源定義的顏色。

 

色彩坡形的時間可以通過修改VisualStateGroup.Transitions內預設VisualTransition的GeneratedDuration屬性。

 

總體來說WinRT中的控制項範本類似WPF4(和WPF4以前還是有較多差別的,那時沒有VisualStateManager這些東西)和Silverlight的。但是也有一些小細節,比如WPF4中VisualStateGroup和VisualState都有Name屬性。而在Silverlight和WinRT中必須使用x:Name。還有WPF和Silverlight中Button的CommonStates中的滑鼠指向狀態名稱是MouseOver,但是在WinRT該名稱是PointerOver。(Pointer在WinRT中完全覆蓋了Mouse這個名詞,因為WinRT是支援案頭和平板的架構,因此使用Pointer這個抽象概念來代表任何滑鼠或者觸控螢幕的操作)

 

XAML代碼:

<!-- 需要的顏色定義 -->

<Color x:Key="BtnPressed">Black</Color>

<Color x:Key="BtnHighlighted">Gray</Color>

<Color x:Key="BtnDisabled">Gray</Color>

 

<!-- MyButtonStyle -->

<Style x:Key="MyButtonStyle" TargetType="Button">

    <Setter Property="Padding" Value="10"/>

    <Setter Property="Background" Value="Transparent"/>

    <Setter Property="Template">

        <Setter.Value>

            <ControlTemplate TargetType="Button">

                <Border Background="{TemplateBinding Background}"

                       BorderBrush="{TemplateBinding BorderBrush}"

                       BorderThickness="{TemplateBinding BorderThickness}"

                       Name="border">

                   

                    <ContentPresenter Margin="{TemplateBinding Padding}" Name="content"/>

 

                    <VisualStateManager.VisualStateGroups>

                        <VisualStateGroup x:Name="CommonStates">

                            <VisualState x:Name="Normal"/>

                            <VisualState x:Name="PointerOver">

                                <Storyboard>

                                    <ColorAnimation Storyboard.TargetName="border" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"

                                                   Duration="0" To="{StaticResource BtnHighlighted}"/>

                                </Storyboard>

                            </VisualState>

                            <VisualState x:Name="Pressed">

                                <Storyboard>

                                    <ColorAnimation Storyboard.TargetName="border" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"

                                                   Duration="0" To="{StaticResource BtnPressed}"/>

                                </Storyboard>

                            </VisualState>

                            <VisualState x:Name="Disabled">

                                <Storyboard>

                                    <ColorAnimation Storyboard.TargetName="border" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"

                                                   Duration="0" To="Transparent"/>

                                    <ColorAnimation Storyboard.TargetName="border" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)"

                                                   Duration="0" To="{StaticResource BtnDisabled}"/>

                                    <ColorAnimation Storyboard.TargetName="content" Storyboard.TargetProperty="(ContentControl.Foreground).(SolidColorBrush.Color)"

                                                   Duration="0" To="{StaticResource BtnDisabled}"/>

                                </Storyboard>

                            </VisualState>

                           

                            <VisualStateGroup.Transitions>

                                <VisualTransition GeneratedDuration="0:0:0.5"/>

                            </VisualStateGroup.Transitions>

                        </VisualStateGroup>

                    </VisualStateManager.VisualStateGroups>

                </Border>

            </ControlTemplate>

        </Setter.Value>

    </Setter>

</Style>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.