2013-09-25 27 views
0

有一個小問題,我不明白。我有一個BasePage(類型PhoneApplicationPage),我想處理所有的ButtonClicks。處理ButtonClick在基類

我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); 
    } 

有人能向我解釋,我該怎麼處理Button_Click只在BasePage類中(可能嗎?)或者我做錯了什麼?

提前感謝;)

回答

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); 
} 
+0

訪問級別公共這麼想的的改變解決了問題,錯誤,如果我沒有在執行的MainPage的Button_Click仍然是 - **可是爲什麼我有在MainPage中實現'Button_Click',我不能從基類('BasePage')派生它嗎?** –