WPF UserControl通用点击事件

时间:2017-08-11 11:52:30

标签: wpf user-controls

我在WPF中创建了一个UserControl,它在第一次运行时包含2个简单的按钮。

现在,我想在MessageBox中显示用户点击的按钮的x:Name,但我不想单独为每个按钮创建Clicked事件。

是否可以在UserControl中编写1个通用Clicked事件,然后识别sender对象以获取正确的x:Name

2 个答案:

答案 0 :(得分:4)

  

是否可以在UserControl中编写1个通用Clicked事件,然后识别发件人对象以获取正确的x:名称?

不确定

<Button x:Name="first" Click="generic_Click" />
<Button x:Name="second" Click="generic_Click" />
private void generic_Click(object sender, RoutedEventArgs e)
{
    Button clickedButton = sender as Button;
    MessageBox.Show(clickedButton.Name);
}

答案 1 :(得分:0)

在按钮样式中使用EventSetter xaml中的示例:

<StackPanel
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.EventOvw2"
Name="dpanel2"
Initialized="PrimeHandledToo"
>
<StackPanel.Resources>
    <Style TargetType="{x:Type Button}">
        <EventSetter Event="Click" Handler="b1SetColor"/>
    </Style>
</StackPanel.Resources>
<Button>Click me</Button>
<Button Name="ThisButton" Click="HandleThis">
    Raise event, handle it, use handled=true handler to get it anyway.
</Button>
</StackPanel>  

然后在cs文件中:

void b1SetColor(object sender, RoutedEventArgs e)
{
    Button b = e.Source as Button;
    b.Background = new SolidColorBrush(Colors.Azure);
}

void HandleThis(object sender, RoutedEventArgs e)
{
    e.Handled=true;
}