控件模板學習筆記(二)

1.模板綁定TemplateBindingide

什麼狀況下使用模板綁定?工具

--當您仍可能想要使用公共屬性更改控件的外觀時,模板綁定是您的不二之選學習

怎麼使用模板綁定?spa

--咱們還以學習筆記一中的Button爲例,自定義模板中的Border的Background=「Red」,使用TemplateBinding則爲Background=「{TemplateBinding Backbround}」;code

等號左邊的Background爲Border的背景顏色,等號右邊的Background爲Button的屬性。blog

使用模板綁定可以解決什麼樣的問題?get

--當多個按鈕呈現的可視化結構相同,只是背景顏色或是邊框顏色不同時,若是不使用TemplateBinding,可能您就要爲每個按鈕定義一個控件模板,這些控件模板相差的it

也許只是一個屬性。因此爲了解決這種狀況咱們能夠使用TemplateBinding,示例以下:event

<ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}">
            <Border Name="Border" BorderBrush="Orange" BorderThickness="3" CornerRadius="2" Background="{TemplateBinding Background}" TextBlock.Foreground="White" SnapsToDevicePixels="True">
                <Grid>
                    <Rectangle Name="FocusCue" Visibility="Hidden" Stroke="Black"
                               StrokeThickness="1" StrokeDashArray="1 2" SnapsToDevicePixels="True"></Rectangle>
                    <ContentPresenter RecognizesAccessKey="True" Margin="{TemplateBinding Padding}"></ContentPresenter>
                </Grid>
            </Border>
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="true">
                    <Setter TargetName="Border" Property="Background" Value="DarkRed" />
                </Trigger>
                <Trigger Property="IsPressed" Value="true">
                    <Setter TargetName="Border" Property="Background" Value="IndianRed" />
                    <Setter TargetName="Border" Property="BorderBrush" Value="DarkKhaki" />
                </Trigger>
                <Trigger Property="IsKeyboardFocused" Value="True">
                    <Setter TargetName="FocusCue" Property="Visibility" Value="Visible" />
                </Trigger>
            </ControlTemplate.Triggers>
</ControlTemplate>
控件模板
<Button Content="ButtonA" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75" Background="Red" Template="{StaticResource ButtonTemplate}" />
<Button Content="ButtonB" HorizontalAlignment="Left" Margin="10,47,0,0" VerticalAlignment="Top" Width="75" Background="Green" Template="{StaticResource ButtonTemplate}" />

效果如圖:模板

2.自動應用模板

自動應用模板是不設置Template=「{StaticResource ButtonTemplate}」時,項目中的按鈕自動應用定義好的控件模板。

怎麼實現自動應用模板?
--技巧是使用類型樣式,這種樣式會自動影響相應的元素類型並設置Template屬性,示例以下:

<Style TargetType="{x:Type Button}">
            <Setter Property="Control.Template" Value="{StaticResource ButtonTemplate}" />
</Style>

注:雖然在Resources裏定義,可是沒有定義x:Key屬性。其中的ButtonTemplate爲學習筆記一中定義的控件模板

<Button Content="ButtonA" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75" />
<Button Content="ButtonB" HorizontalAlignment="Left" Margin="10,75,0,0" VerticalAlignment="Top" Width="75"  />

效果如圖:,其實從工具箱裏新添加一個按鈕也會自動應用該控件模板,只是如今我還不會製做和上傳Gif類型的文件,沒辦法貼效果圖。

相關文章
相關標籤/搜索