带自定义参数的样式触发器

时间:2013-12-25 22:38:10

标签: c# .net wpf .net-4.5

我的XAML中有以下样式:

<Style x:Key="NumberButton" TargetType="Button">
    <Setter Property="Width" Value="Auto"/>
    <Setter Property="Height" Value="Auto"/>
    <Setter Property="Margin" Value="2"/>
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <Label Content="{Binding}" FontSize="20" FontFamily="Consolas"/>
            </DataTemplate>
        </Setter.Value>
    </Setter>
    <EventSetter Event="Click" Handler="OnClicked"/>
</Style>

我创建了10个<Button>,并将此样式应用于每个样式。每个按钮的Content=""设置为0-9。我想为每个按钮(通过样式本身)创建一个事件处理程序,它将Content属性的值传递给后面代码中的事件处理程序。

我还是WPF的新手所以非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

试试这个

<Style x:Key="NumberButton" TargetType="Button">
<Setter Property="Width" Value="Auto"/>
<Setter Property="Height" Value="Auto"/>
<Setter Property="Margin" Value="2"/>
<Setter Property="Tag" Value="{Binding}"/>
<Setter Property="ContentTemplate">
    <Setter.Value>
        <DataTemplate>
            <Label Content="{Binding}" FontSize="20" FontFamily="Consolas"/>
        </DataTemplate>
    </Setter.Value>
</Setter>
<EventSetter Event="Click" Handler="OnClicked"/>
</Style>

然后在代码背后

 void OnClicked(object sender, RoutedEventArgs e)
 {
   var button = sender as Button;
   var content= button.Tag; // this is the value you want
 }

答案 1 :(得分:1)

您可以从发件人按钮获取Content

void OnClicked(object sender, RoutedEventArgs e)
{
    string content = ((Button)sender).Content.ToString();
}

从内容类型为对象的内容上调用ToString()