0

私が理解していない小さな問題があります。私はすべてのボタンクリックを処理したいBasePage(タイプの) を持っています。PhoneApplicationPage

私の BasePage クラスは特別なものではなく、Button_Click ハンドラーを実装するだけです。

using Microsoft.Phone.Controls;
using System.Windows;

namespace TestProject
{
    public partial class BasePage : PhoneApplicationPage
    {
        protected void Button_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Button clicked");
        }
    }
}

実際のページは次のようになります。

using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using TestProject.Resources;

namespace TestProject
{
    public partial class MainPage : BasePage
    {
        public MainPage()
        {
            InitializeComponent();
        }
    }
}

...そしてxamlで、BasePageクラスによって処理されるボタンを作成しました:

<local:BasePage
    x:Class="TestProject.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:TestProject"
    mc:Ignorable="d"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">

    <Grid x:Name="LayoutRoot" Background="Transparent">

        <Button
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            Content="Button"
            Click="Button_Click"/>

    </Grid>

</local:BasePage>

アプリケーションを実行しようとすると、常に例外が発生します。

A first chance exception of type 'System.Windows.Markup.XamlParseException' occurred in System.Windows.ni.dll
An exception of type 'System.Windows.Markup.XamlParseException' occurred in System.Windows.ni.dll but was not handled in user code
An exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.ni.dll and wasn't handled before a managed/native boundary
An exception of type 'System.Reflection.TargetInvocationException' occurred in Microsoft.Phone.ni.dll and wasn't handled before a managed/native boundary
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Windows.Markup.XamlParseException: Failed to assign to property 'System.Windows.Controls.Primitives.ButtonBase.Click'. [Line: 23 Position: 19]
   at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
   at TestProject.MainPage.InitializeComponent()
   at TestProject.MainPage..ctor()
   --- End of inner exception stack trace ---
   at System.Windows.Navigation.PageResourceContentLoader.EndLoad(IAsyncResult asyncResult)
   at System.Windows.Navigation.NavigationService.ContentLoader_BeginLoad_Callback(IAsyncResult result)
An exception of type 'System.Reflection.TargetInvocationException' occurred in Microsoft.Phone.ni.dll and wasn't handled before a managed/native boundary
An unhandled exception of type 'System.Reflection.TargetInvocationException' occurred in System.Windows.ni.dll

Button_Click の実装を MainPage にも追加すると、すべてが機能します。

    new protected void Button_Click(object sender, RoutedEventArgs e)
    {
        base.Button_Click(sender, e);
    }

BasePage クラスでのみ Button_Click を処理する方法を誰かに説明してもらえますか (それは可能ですか?)、または何が間違っているのでしょうか?

よろしくお願いします;)

4

1 に答える 1

0

のアクセス レベルを変更してみてくださいButton_Click

これを試して

public partial class BasePage : PhoneApplicationPage
{
    public void Button_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("Button clicked");
    }
}


 new public void Button_Click(object sender, RoutedEventArgs e)
 {
    base.Button_Click(sender, e);
 }
于 2013-09-25T12:36:36.247 に答える