2

我有一个Button内部UserControl

<UserControl.Resources>
    <ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}">
        <ContentPresenter />
    </ControlTemplate>
</UserControl.Resources>    
<Button Template="{StaticResource ButtonTemplate}" Click="Button_Click" />

但是,如果我指定 a Template,则此 Button 不会触发Click事件。
为什么?我怎么解决这个问题?

代码隐藏:

public event RoutedEventHandler Click;

private void Button_Click(object sender, RoutedEventArgs e)
{
    if (Click != null)
        Click(sender, e);
}
4

1 回答 1

2

您的按钮模板是一个简单的 ContentPresenter。在您给我们的代码中,您没有在按钮中添加任何内容,因此它不会有任何大小。将无法点击。

<Window x:Class="StackOverflow.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    Title="MainWindow">

<Window.Resources>
    <ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}">
        <ContentPresenter />
    </ControlTemplate>
</Window.Resources>

<Button Template="{StaticResource ButtonTemplate}" Click="Button_Click">
    <TextBlock Text="test" />
</Button>

</Window>

此代码有效,如果您单击“测试”,则会正确触发 Button 的 Click 事件。我是在窗口中完成的,但在 UserControl 中是一样的。

如果您正在谈论您的自定义 Click 事件,则只有在您附加处理程序时才会触发它。

于 2012-10-19T14:38:40.793 回答