Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 触发器只适用于第二个_Wpf_Templates_Binding_Triggers - Fatal编程技术网

Wpf 触发器只适用于第二个

Wpf 触发器只适用于第二个,wpf,templates,binding,triggers,Wpf,Templates,Binding,Triggers,我有一个具有以下资源的用户控件: <UserControl.Resources> <ControlTemplate TargetType="Button" x:Key="tmp1"> <Image Source="Resources/img1.png> </ControlTemplate> <ControlTemplate TargetType="Button" x:Key="tmp2">

我有一个具有以下资源的用户控件:

<UserControl.Resources>
    <ControlTemplate TargetType="Button" x:Key="tmp1">
        <Image Source="Resources/img1.png>
    </ControlTemplate>
    <ControlTemplate TargetType="Button" x:Key="tmp2">
        <Image Source="Resources/img2.png>
    </ControlTemplate>
</UserControl.Resources>
我尝试在使用以下触发器启用按钮时应用模板:

    <Style TargetType="Buton">
        <Setter Property="Template" Value="{StaticResource tmp1}" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=btn1, Path=IsEnabled}" Value="True">
                <Setter Property="Template" Value="{StaticResource tmp2}"></Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style>
什么都没发生

但听我说:当我添加第二个setter时,如下所示:

    <Style TargetType="Buton">
        <Setter Property="Template" Value="{StaticResource tmp1}" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=btn1, Path=IsEnabled}" Value="True">
                <Setter Property="Template" Value="{StaticResource tmp2}"></Setter>
                <Setter Property="Margin" Value="-6"></Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style>
该按钮更改其模板并且根本不移动-边距不应用


有人能告诉我是什么导致了这种行为吗?

使用标准触发器来观察IsEnabled属性。 像这样的东西应该有用

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
<ControlTemplate TargetType="{x:Type Button}" x:Key="tmp1">
  <Image Source="img1.png"/>
</ControlTemplate>

<ControlTemplate TargetType="{x:Type Button}" x:Key="tmp2">
  <Image Source="img2.png"/>
    </ControlTemplate>

    <Style TargetType="Button">
      <Setter Property="Template" Value="{StaticResource tmp1}" />
      <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
          <Setter Property="Template" Value="{StaticResource tmp2}"/>
        </Trigger>
      </Style.Triggers>
    </Style>
  </Page.Resources>

  <Grid>  
    <Button IsEnabled="False"></Button>
  </Grid>
</Page>
希望这有帮助


什么是btn1。。我在任何地方都看不到那种元素……谢谢,就是这样。您知道是什么导致了DataTrigger的奇怪行为吗?…DataTriggers将用于触发数据更改。例如,您可以将元素的DataContext属性绑定到集合或XML文档。使用DataTrigger,您观察到它包含元素的数据,触发器将作出反应。关于更多信息和数据模板,我可以参考msdn的文档:但对于您的问题,我刚刚认识到我没有回答您的问题:D,sry…起初我对btn1在您的绑定中的用法感到困惑,无论怎样…边距是一种属性,它调用控件的度量方法,这意味着,控件将被重新排列和重新提交…但这也应该发生在样式更改中…我不得不说,这有点神秘^^..直到现在还不知道