2014-02-18 53 views
2

我有一个按钮对话框 - 按钮的文本和功能是动态的,并根据用户的需求而改变。 在大多数情况下,按钮样式是默认样式,如果按钮是OK按钮,我希望按钮使用不同的样式。 我试图添加一个触发器,它会根据布尔属性更改按钮样式: (当IsOKButton =真使用“RedButtonStyle”)WPF - 创建使用资源风格的触发器

<Button.Template> 
       <ControlTemplate > 
        <ControlTemplate.Triggers> 
         <DataTrigger Binding="{Binding IsOKButton}" Value="True"> 
          <Setter Property="Style" Value="{StaticResource RedButtonStyle}"/> 
         </DataTrigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Button.Template> 
  • 的RedButtonStyle是一种资源的风格,可以在不同的项目中使用不同的按钮类型,所以灵魂应该在我的项目中,不能在资源风格本身。

但是当使用这个触发器时,我得到一个异常。 “设置属性system.windows.controls.control.template抛出一个异常”

任何人都可以帮我解决这个问题,或者建议一个想法来动态地设置样式吗?

感谢

回答

4

你可以把扳机这种风格本身:

<Style x:Key="OKButtonStyle"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding IsOKButton}" Value="True"> 
      //Whatever Property is different in the OKButtonStyle 
     </DataTrigger> 
     <DataTrigger Binding="{Binding IsOKButton}" Value="False"> 
      //Set it back to default 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

然后,只需给你的按钮,从一开始的风格OKButtonStyle。

如果想使你的OK按钮大多是一样的,你希望所有的按钮使你可以将它基于一般一个像这样的更一般的风格:

<Style x:Key="OKButtonStyle" BasedOn="{StaticResource GeneralButtonStyle}"> 
+0

感谢泰勒。我不知道我可以这样做,因为我使用的风格是整个系统的资源风格。在我的视图中,我将它用作确定按钮样式,但其他视图并非总是如此。 – user3323660

+0

我编辑了我的原始问题,使其更加清晰。无论如何,感谢您的回答:) – user3323660

+0

这就是为什么我在最后添加了这一点。您可以根据其中包含数据触发器的红色按钮样式编写新样式。 – TylerD87