練習:建立並套用樣式

已完成

在本練習中,您會在 Tip Calculator 應用程式中定義和套用頁面層級樣式。

此練習是前一個練習的延續。 您可以使用現有的解決方案做為這些步驟的起點,或開啟您在第一次練習中複製存放庫中 exercise3/TipCalculator 資料夾內的 TipCalculator 專案。

定義樣式

讓我們從實作要用於標籤的「大小 22 粗體」字型樣式開始著手。 將該樣式儲存在頁面層級的字典中。

  1. 在 [TipCalculator] 專案中,開啟 StandardTipPage.xaml 檔案。

  2. 在現有資源之後,將樣式新增至頁面的資源字典。 使用 infoLabelStylex:Key 值和 LabelTargetType 值。

    <ContentPage.Resources>
        <ResourceDictionary>
            ...
            <Style x:Key="infoLabelStyle" TargetType="Label">
            </Style>
        </ResourceDictionary>
    </ContentPage.Resources>
    
  3. 新增 Setter 執行個體,將樣式的 FontSize 屬性設為 fontSize 資源中的值。

  4. 新增另一個 Setter ,將 FontAttributes 屬性設為 Bold

    <Style x:Key="infoLabelStyle" TargetType="Label">
        <Setter Property="FontSize" Value="{StaticResource fontSize}" />
        <Setter Property="FontAttributes" Value="Bold" />
    </Style>
    

套用樣式

  1. 找出使用 {StaticResource fontSize}FontSize 值和 Bold 的 FontAttributes 值的三個 Label 控制項。 將這些屬性指派從標籤移除。

  2. 使用 StaticResource 標記延伸,將 infoLabelStyle 樣式指派給這三個標籤:

    <!-- Left column = static labels -->
    <Label x:Name="billLabel"  Text="Bill"  ... Style="{StaticResource infoLabelStyle}" ... />
    <Label x:Name="tipLabel"   Text="Tip"   ... Style="{StaticResource infoLabelStyle}" ... />
    <Label x:Name="totalLabel" Text="Total" ... Style="{StaticResource infoLabelStyle}" ... />
    
  3. 執行應用程式。 應用程式應該看起來和以前完全一樣。 不過,字型屬性現在是以樣式來設定。

變更字型樣式

讓我們看看更新樣式有多容易。

  1. 返回您資源字典中的樣式,並將 fontSize 資源變更為 32

  2. 再次執行應用程式以檢視變更。 帳單 (Bill)、小費 (Tip) 和合計 (Total) 三個標籤應該更大。

  3. fontSize 資源變更回 22

建立基底樣式

讓我們藉由新增基底樣式來延伸 StandardTipPage 頁面的實作。 您會以與先前步驟所建立樣式重疊的值,來定義新的樣式。 然後,您會在本練習的下一部分中重構這個新樣式。

  1. 開啟 [StandardTipPage.xaml] 檔案。

  2. 將其他樣式新增至頁面的資源字典。 使用 baseLabelStylex:Key 值和 LabelTargetType 值。

    重要

    infoLabelStyle 樣式上方定義此樣式。 當您繼承此樣式後,此位置將非常重要。 樣式只能繼承範圍中其他樣式。

  3. 新增 Setter 以設定 FontSize 屬性。 請注意,這個 Setter 是舊版 infoLabelStyle 中 Setter 的重複項目。

    <ContentPage.Resources>
        <ResourceDictionary>
            ...
            <Style x:Key="baseLabelStyle" TargetType="Label">
                <Setter Property="FontSize" Value="{StaticResource fontSize}" />
            </Style>
            ...
        <ResourceDictionary>
    </ContentPage.Resources>
    
  4. 將新的 baseLabelStyle 套用至頁面上顯示小費和總計計算金額的兩個標籤。 將明確的 FontSize 設定從這些標籤移除。 下列程式碼為範例。

    <!-- Right column = user input and calculated-value output -->
    ...
    <Label x:Name="tipOutput"   Text="0.00" TextColor="Navy" Style="{StaticResource baseLabelStyle}" Grid.Row="1" Grid.Column="1" />
    <Label x:Name="totalOutput" Text="0.00" TextColor="Navy" Style="{StaticResource baseLabelStyle}" Grid.Row="2" Grid.Column="1" />
    
  5. 執行應用程式。 確認計算小費和總計金額值 (包含值 0.00) 的樣式仍然正確。

使用樣式繼承

您現在已做好使用繼承來重構樣式的準備。 重構會讓您消除重複的 setter 使用。

  1. 開啟 [StandardTipPage.xaml] 檔案。

  2. 在頁面的資源字典中找出 infoLabelStyle 樣式。 將此樣式移至資源字典中的 baseLabelStyle 下方。

  3. infoLabelStyle 樣式的 BasedOn 屬性設定為 baseLabelStyle。 移除 FontSize 的 setter。 您已不再需要,因為此樣式現在會從基底樣式繼承 FontSize 設定。

    <ContentPage.Resources>
        <ResourceDictionary>
            ...
            <Style x:Key="baseLabelStyle" TargetType="Label">
                <Setter Property="FontSize" Value="{StaticResource fontSize}" />
            </Style>
            <Style x:Key="infoLabelStyle" BasedOn="{StaticResource baseLabelStyle}" TargetType="Label">
                <Setter Property="FontAttributes" Value="Bold" />
            </Style>
        <ResourceDictionary>
    </ContentPage.Resources>
    

    注意

    資源字典中的資源順序至關重要。 baseLabelStyle 樣式必須先定義,才能定義參照該樣式的任何其他樣式,否則樣式繼承將無法運作。

  4. 執行應用程式,並確認標籤和計算金額的樣式仍然正確。