WPF 學習之控制元件模板 ControlTemplate Triggers
阿新 • • 發佈:2019-01-12
控制元件模板ControlTemplate,有兩部分:VistualTree視覺樹,即是能看到的外觀;Trigger觸發器,裡面包括外部條件達到某一條件下會引起的響應。
<Window.Resources> <ControlTemplate x:Key="ButtonTempalted" TargetType="{x:Type Button}"> <Border Name="Border" BorderThickness="2" CornerRadius="3" BorderBrush="AliceBlue" Background="Aqua" TextBlock.Foreground="White"> <ContentPresenter Margin="{TemplateBinding Padding}" HorizontalAlignment="Center" VerticalAlignment="Center" > </ContentPresenter> </Border> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True" > <Setter TargetName="Border" Property="Background" Value="Red"></Setter> </Trigger> <Trigger Property="IsPressed" Value="True"> <Setter TargetName="Border"Property="Background" Value="White"></Setter> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Window.Resources> <StackPanel Margin="5"> <Button Margin="5" Padding="3">Normal Button</Button> <Button Margin="5" Padding="3" Name="myBorder" Template="{StaticResource ResourceKey=ButtonTempalted}">Templated Button</Button> </StackPanel>
以上xml中描述 StackPanel 中添加了2個Button控制元件,一個不使用控制元件模板Normal Button 一個使用ButtonTempalted 控制元件模板資源
控制元件模板中包含視覚樹 和觸發器,在上述例子中我設定了 該控制元件模板目標型別為Button 在外觀設定中設定buuton的Border的外觀屬性
需要注意的是如果僅如下設定border外觀,buuton控制元件不能正常顯示,此時還需要設定ContentPresenter內容表示器 設定內容元素的屬性
<Border Name="Border" BorderThickness="2" CornerRadius="3" BorderBrush="AliceBlue" Background="Aqua" TextBlock.Foreground="White"> </Border>
Trigger 觸發器設定控制元件模板的行為
<Trigger Property="IsMouseOver" Value="True" > <Setter TargetName="Border" Property="Background" Value="Red"></Setter> </Trigger>
需要設定 Property 行為目標 Value觸發該行為的值