无法分配给属性'System.Windows.Controls.Primitives.ButtonBase.Click'

时间:2012-06-19 17:58:30

标签: c# silverlight xamlparseexception

有一个我不理解的有趣情况。

以下是该方案:

我创建了一个简单的Silverlight 5应用程序。我在主页面上放置一个按钮控件并创建一个Click事件处理程序。

XAML如下所示.....

<UserControl x:Class="SilverlightApplication6.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="130,43,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
    </Grid>
</UserControl>

到目前为止一切顺利。

将代码中的事件处理程序连接起来......

private void button1_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Hi There!!!");
}

编译并运行应用程序。我'点击'按钮,得到一个漂亮的小消息框。再一次,到目前为止,这么好。

向后面的代码添加一个新方法(如下所示),其方法名称与按钮单击事件处理程序相同,但具有不同的签名。

private void button1_Click()
{
    MessageBox.Show("This method causes a XamlParseException!");
}

编译并执行代码。打开应用程序并单击按钮,我得到以下异常:

System.Windows.Markup.XamlParseException was unhandled by user code
  Message=Failed to assign to property 'System.Windows.Controls.Primitives.ButtonBase.Click'. [Line: 10 Position: 149]
  LineNumber=10
  LinePosition=149
  StackTrace:
       at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
       at SilverlightApplication6.MainPage.InitializeComponent()
       at SilverlightApplication6.MainPage..ctor()
       at SilverlightApplication6.App.Application_Startup(Object sender, StartupEventArgs e)
       at MS.Internal.CoreInvokeHandler.InvokeEventHandler(UInt32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
       at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName, UInt32 flags)
  InnerException: 

为什么会这样?

2 个答案:

答案 0 :(得分:2)

问题是void button1_Click()不是Click事件的有效处理程序。 ClickRoutedEventHandler,定义为:

public delegate void RoutedEventHandler(
    Object sender,
    RoutedEventArgs e
)

请注意,您也可以使用void button1_Click(object anyName, EventArgs forTheParams),只需要足够密切地匹配代表即可进行转换。

答案 1 :(得分:0)

我有一个场景,我将按钮链接到这样的方法......

<Button Click="MethodName"..../>

我在不知情的情况下以某种方式复制了该方法,因此我也遇到了这个错误。 无法分配给属性&#39; System.Windows.Controls.Primitives.ButtonBase.Click 希望这可以帮助别人节省一些时间。