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類型的文件,沒辦法貼效果圖。