ControlTemplate使用控件属性

时间:2014-11-29 16:49:46

标签: c# wpf xaml

ControlTemplate是否可以使用控件中使用模板的属性?

例如,我有一个按钮,在MouseOver上将颜色更改为红色。但是,我还有一个看起来完全一样的按钮,除了它改为White而不是Red。是否有可能,无论Button有什么背景值,那么该值是否会在控件模板中使用?

目前,这就是我的ControlTemplate的样子:

<ControlTemplate x:Key="CloseButtonTemplate" TargetType="{x:Type Button}">
        <Border>
            <Border.Style>
                <Style>
                    <Setter Property="Border.Background" Value="Transparent"/>
                    <Style.Triggers>
                        <Trigger Property="Border.IsMouseOver" Value="True">
                            <Setter Property="Border.Background" Value="#FFE53935" />
                            <Setter Property="Window.Cursor" Value="Hand" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
            <TextBlock Foreground="#FFEEEEEE" HorizontalAlignment="Center" VerticalAlignment="Center" Text="X" FontFamily="Calibri" />
        </Border>
</ControlTemplate>

我正在尝试做的是将Border.Background设置为Button背景值。因此,如果我有<Button Background="Red" />,则Border.Background的值为红色。

2 个答案:

答案 0 :(得分:0)

你应该这样做:

<Border x:Name="border" Background="{TemplateBinding Background}">

请参阅TemplateBinding on MSDN

答案 1 :(得分:0)

是ControlTemplate可以使用控件中使用模板的属性。请参阅link进行绑定


   <Window.Resources>
    <ControlTemplate x:Key="CloseButtonTemplate" TargetType="{x:Type Button}">
        <Border BorderBrush="Black" BorderThickness="1"  Height="{TemplateBinding Height}" Width="{TemplateBinding Width}">
            <Border.Style>
                <Style>
                    <Setter Property="Border.Background" Value="Transparent"/>
                    <Style.Triggers>
                        <Trigger Property="Border.IsMouseOver" Value="True">
                            <Setter Property="Border.Background" Value="{Binding Path=Background,RelativeSource={RelativeSource TemplatedParent}}" />
                            <Setter Property="Window.Cursor" Value="Hand" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
            <TextBlock Foreground="#FFEEEEEE" HorizontalAlignment="Center" VerticalAlignment="Center" Text="X" FontFamily="Calibri" />
        </Border>
    </ControlTemplate>
</Window.Resources>
<UniformGrid>
    <Button Background="Red" Template="{StaticResource CloseButtonTemplate}"  Height="30" Width="200"/>
    <Button Background="Green" Template="{StaticResource CloseButtonTemplate}"  Height="30" Width="200"/>
    <Button Background="Blue" Template="{StaticResource CloseButtonTemplate}"  Height="30" Width="200"/>
</UniformGrid>