首页 文章

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

提问于
浏览
0

我有以下元素:

<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>

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

执行方法和设置 doIt 工作正常,但边框的背景不会更改为红色 . 我错过了重要的事吗?

1 回答

  • 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>
    

    EDIT :由于第一种方法不起作用,请直接尝试应用于Border的样式

    如果未在控件模板中设置类似背景的属性,则使用触发器进行的更改将不起作用

    <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>
    

相关问题