4

私には理解できない興味深い状況があります。

シナリオは次のとおりです。

シンプルな 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: 

なぜこれが起こるのですか?

4

2 に答える 2

2

問題は、イベント void button1_Click()の有効なハンドラーではないことです。であり、次のように定義されます。ClickClickRoutedEventHandler

public delegate void RoutedEventHandler(
    Object sender,
    RoutedEventArgs e
)

も使用できることに注意してくださいvoid button1_Click(object anyName, EventArgs forTheParams)。変換できるようにデリゲートと十分に一致する必要があります。

于 2012-06-19T18:02:51.577 に答える
0

ボタンをこのようなメソッドにリンクするシナリオがありました...

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

どういうわけか知らないうちにメソッドを複製した結果、このエラーも発生しました。プロパティ 'System.Windows.Controls.Primitives.ButtonBase.Click への割り当てに失敗しました。誰かが時間を節約するのに役立つことを願っています。

于 2014-06-02T06:53:38.660 に答える