1. 程式人生 > >UWP 改變Button樣式

UWP 改變Button樣式

文本 es2017 都是 some 屬性 border 如果 顏色 cnblogs

-----some words------

1.Control:控制 (我們理解成控件)

2.Template:模板

3.Ellipse 橢圓

4.Content 內容

5.Presenter 節目主持人,演播廳,推薦者

6.ContentPresenter 內容提供者...

------the end ---------

一:Control類

Control類是所有控件的父類,例如Button按鈕控件,TextBlock文本框控件等都是繼承於Control類。

二:Ellipse類

UWP裏畫一個圓,沒有圓這個類,用的是Ellipse橢圓類,給這個橢圓的長和框設置成一樣就好了。

 <Ellipse Width="50"
          Height="50"
          Fill="Blue"></Ellipse>

三:改變Button控件的樣式

雖然我們可以簡單的設置一些控件的樣式,但是還是不夠。例如下面是一個最簡單的Button控件,我們可以改的是Width,Height,但如果你想做一個圓形的按鈕,怎麽做呢?

技術分享

在設計器裏找到你寫的Button控件,右鍵->編輯模板->編輯副本

技術分享

vs會幫你生成一個樣式

 <<Page.Resources>
        <Style x:Key="ButtonStyle1" TargetType="Button">
            <Setter Property="Background" Value="{ThemeResource ButtonBackground}"/>
            <Setter Property="Foreground" Value="{ThemeResource ButtonForeground}"/>
            <Setter Property="BorderBrush" Value="{ThemeResource ButtonBorderBrush}"/>
            <Setter Property="BorderThickness" Value="{ThemeResource ButtonBorderThemeThickness}"/>
            <Setter Property="Padding" Value="8,4,8,4"/>
            <Setter Property="HorizontalAlignment" Value="Left"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
            <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/>
            <Setter Property="FontWeight" Value="Normal"/>
            <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}"/>
            <Setter Property="UseSystemFocusVisuals" Value="True"/>
            <!--<Setter Property="FocusVisualMargin" Value="-3"/>-->
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Grid x:Name="RootGrid" Background="{TemplateBinding Background}">
                            <ContentPresenter x:Name="ContentPresenter" AutomationProperties.AccessibilityView="Raw" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" ContentTemplate="{TemplateBinding ContentTemplate}" ContentTransitions="{TemplateBinding ContentTransitions}" Content="{TemplateBinding Content}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Page.Resources>

TargetType="Button" 表示這是一個給Button類型設置的樣式。

控件有一個Template屬性,該屬性用來定義控件的模板,為什麽你創建一個Button按鈕,是方形的而不是圓形的,就是每個控件都有自己的默認模板,當你不去改Template時,他就是默認的,如果我們想讓控件變的漂亮一點,就要改控件的模板。

Template模板屬性存的是ControlTemplate(控件模板)

裏面放的是一個Grid。

說明這個Grid就是該Button的模板。Background="{TemplateBinding Background}" 說明是將我們的在Xaml代碼裏寫的Background綁定到了模板的最外層。簡單來理解就是我們設置的樣式,要麽是通過繼承或者綁定到了我們的模板上。

四:ContentPresenter

內容控件Button有一個Content屬性,相應的模板裏有一個ContentPresenter類用於單獨的裝內容。

單獨裝的好處就是不管你的模板的樣式怎麽改變,我的內容都不會受到影響。

五:做一個圓形Button控件

既然是圓形的按鈕,那麽我們在模板裏加一個圓形。

<Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Grid x:Name="RootGrid" Background="Transparent">
                            <Ellipse Width="{TemplateBinding Width}"
                                     Height="{TemplateBinding Height}"
                                     Fill="{TemplateBinding Background}"></Ellipse>
                            <ContentPresenter x:Name="ContentPresenter" 
                                              AutomationProperties.AccessibilityView="Raw" 
                                              BorderBrush="{TemplateBinding BorderBrush}" 
                                              BorderThickness="{TemplateBinding BorderThickness}" 
                                              ContentTemplate="{TemplateBinding ContentTemplate}" 
                                              ContentTransitions="{TemplateBinding ContentTransitions}"
                                              Content="{TemplateBinding Content}" 
                                              HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                              Padding="{TemplateBinding Padding}" 
                                              VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
</Setter>

將根Grid的背景改成Transparent透明。在Grid裏加上一個圓形,將圓形的背景顏色綁定一下。

技術分享

這裏的例子是Button的Content是一個FontIcon,該content被裝到了模板裏的ContentPresenter裏。

background被綁定到了模板裏的Ellipse的背景裏,這樣一個簡單的按鈕的樣式就做好了。之後如果還要用這個樣式,引用就好了。

當然現在的按鈕的其它狀態樣式比如Pressed,這類的狀態樣式我這裏沒寫,下篇再見!

UWP 改變Button樣式