0

有一个我不明白的小问题。我有一个BasePage(类型PhoneApplicationPage)我想处理我所有的 ButtonClicks。

我的 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 回答