1. 程式人生 > >WPF 學習之控件模板 ControlTemplate Triggers

WPF 學習之控件模板 ControlTemplate Triggers

static content mouse 還需要 panel pro 行為 hit ltr

控件模板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觸發該行為的值

WPF 學習之控件模板 ControlTemplate Triggers