【问题标题】:Creating several customized button template创建几个自定义按钮模板
【发布时间】:2011-04-04 14:33:35
【问题描述】:

我只是想知道是否可以在 WPF 中创建几个按钮模板,然后通过“声明”按钮模板名称(或您建议的其他方法)将要使用的模板分配给特定按钮

我要创建的按钮模板是:

  1. 黑色背景、圆角、文本显示的按钮
  2. 银色背景、圆角、文本显示的按钮,文本旁边带有图像
  3. 金色背景的按钮,文本旁边显示不同的图像

我将生成的按钮样式取决于我将“调用”的按钮模板 其中:

如果 selection = 1,将使用模板 1。 (这将在 C# 中完成)

【问题讨论】:

    标签: c# wpf image templates button


    【解决方案1】:

    实现此目的的一种方法是使用触发器。为按钮提供一个样式,该样式根据其绑定的属性的值来选择其模板。

    我没有把它放在 XAML 编辑器中,所以可能有语法错误,但这是要点:

    <Style TargetType="Button">
        <Style.Setters>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <!-- default template -->
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style.Setters>
        <Style.Triggers>
            <DataTrigger Binding="{Binding SomeValue}" Value="1">
                <DataTrigger.Setters>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="Button">
                                <!-- template when SomeValue == 1 -->
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger.Setters>
            </DataTrigger>
            <DataTrigger Binding="{Binding SomeValue}" Value="2">
                <DataTrigger.Setters>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="Button">
                                <!-- template when SomeValue == 2 -->
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger.Setters>
            </DataTrigger>
        </Style.Triggers>
    </Style>
    

    【讨论】:

      【解决方案2】:

      您可以制作任意数量的按钮(或任何其他控件)模板。您使用样式上的 x:key="" 属性来“命名”您的模板,并在目标按钮上设置样式....

      <Style x:Name="MyButton1">
      ....
      </Style>
      

      然后在你的按钮上......

      使用动态资源..

      <Button Style="{DynamicResource MyButton1}"/> 
      

      或者您可以使用 StaticResource 代替

      <Button Style="{StaticResource MyButton1}"/> 
      

      【讨论】:

      • 有没有办法在 C# 中调用这些按钮模板?
      • 更正:正如你的句子所说,它应该是 x:Key 而不是 x:Name。要从后面的代码中调用它,您必须使用 FindResource("MyButton1")
      猜你喜欢
      • 2013-03-05
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 2016-12-27
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多