使用DataTrigger按钮ControlTemplate中的样式边框

时间:2017-11-24 11:22:21

标签: c# wpf xaml controltemplate datatrigger

我有以下元素:

<Button Click="btn_Click" Name="aName">
    <Button.Template>
        <ControlTemplate TargetType="Button">
            <Border Name="tmpBorder" Padding="10">
                <TextBlock Text="General" />
            </Border>
            <ControlTemplate.Triggers>
                <DataTrigger Binding="{Binding doIt}" Value="someString">
                    <Setter TargetName="tmpBorder" Property="Background" Value="Red" />
                </DataTrigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Button.Template>
</Button>

我的目标是在后面的代码中将Border设置为“someString”时,在ControlTemplate中设置doIt元素的背景。 doIt是后面代码中已定义类的公共成员,将由方法btn_Click设置。

执行方法并设置doIt工作正常,但边框的背景不会变为红色。我错过了一些重要的事情吗?

1 个答案:

答案 0 :(得分:0)

这应该有效

<Button Click="btn_Click" Name="aName">
      <Button.Template>
           <ControlTemplate TargetType="Button">
               <Border Padding="10" Background="{TemplateBinding Background}">
                        <TextBlock Text="General" />
               </Border>
               <ControlTemplate.Triggers>
                        <DataTrigger Binding="{Binding doIt}" Value="someString">
                            <Setter  Property="Background" Value="Red" />
                        </DataTrigger>
               </ControlTemplate.Triggers>
           </ControlTemplate>
     </Button.Template>
</Button>

编辑:由于第一种方法无效,请直接尝试应用于边框的样式

如果您没有在控件模板中设置类似背景的属性,那么使用触发器进行的更改将无法正常工作

<Button Click="btn_Click" Name="aName">
      <Button.Template>
           <ControlTemplate TargetType="Button">
               <ControlTemplate.Resources>
                   <Style TargetType="{x:Type Border}">
                       <Setter Property="Background" Value="Transparent"/>
                       <Style.Triggers>
                           <DataTrigger Binding="{Binding doIt}" Value="someString">
                               <Setter Property="Background" Value="Red" />
                           </DataTrigger>
                       </Style.Triggers>
                   </Style>
               </ControlTemplate.Resources>
               <Border Padding="10" Background="{TemplateBinding Background}" Style>
                        <TextBlock Text="General" />
               </Border>
           </ControlTemplate>
     </Button.Template>
</Button>