WPF中Page类继承问题

问题描述:今天做Jaguar的Kinect互动,发现C#中Page继承失败。

问题解决
在cs文件中修改StartPage继承ContentPage。报如下错误:
 “Jaguar.Page.StartPage”的分部声明一定不能指定不同的基类。
应该是XAML自动生成的StartPage.g.cs里的基类没有改变。那么随后修改xaml文件中映射的类。又报如下错误:
 “Jaguar.Page.ContentPage”不能是 XAML 文件的根,因为它是使用 XAML 定义的。
原来要被继承就必须是只有cs文件,而没有xaml文件的。所以只能保留cs文件。把所有xaml定义的转到cs代码上。
问题终于解决了。别看VS方便,其实问题特多。

C#事件不能直接继承问题

问题描述:今天做Jaguar的Kinect互动,发现C#中事件一继承后就不能调用。

代码如下:
public class ContentPage : System.Windows.Controls.Page
{
public delegate void LoadCompletedHandle(object sender);
public event LoadCompletedHandle LoadCompleted;
}
public partial class StartPage : ContentPage
{
private void VideoPlayer_MediaOpened(object sender, RoutedEventArgs e)
{
if (LoadCompleted != null)
{
LoadCompleted(this);
}
}
}

报错如下:
错误 1 事件“Jaguar.Page.ContentPage.LoadCompleted”只能出现在 += 或 -= 的左边(从类型“Jaguar.Page.ContentPage”中使用时除外) C:\Users\CouldHll\Desktop\Jaguar\Jaguar\Page\StartPage.xaml.cs 48 17 Jaguar

问题分析
事件只能从声明它们的类中调用,派生类不能直接调用在基类声明的事件。

要处理基类的事件,通常通过在基类中为事件创建受保护虚方法(OnEventName)来实现。派生类可以重写基类的OnEventName方法,也可以直接调用基类的OnEventName方法,从而实现调用基类的事件。重写基类的OnEventName方法,派生类可以截获基类正在调用的事件,对这些事件执行它自己的处理。

问题解决

代码如下:
protected virtual void OnLoadCompleted(object sender)
{
if (LoadCompleted != null)
{
this.LoadCompleted(sender);
}
}
private void VideoPlayer_MediaOpened(object sender, RoutedEventArgs e)
{
OnLoadCompleted(this);
}

《史蒂夫·乔布斯传》

“‘我喜欢把很棒的设计和简便的功能融入产品中,而且不会太贵。’”---史蒂夫·乔布斯

“他的父母‘都知道责任在学校,学校没有激发我学习的兴趣,而是让我背一些没用的东西。’”

“我教他,如果你表现得好像你能做某件事,那就能起到作用。我告诉他,装得好像你掌握了一切,别人就会以为你真的掌控了一切。”---诺兰·布什内尔

苹果营销哲学:第一共鸣;第二专注;第三灌输。

“至繁归于至简。”---列奥纳多·达·芬奇

“有时对那些渴望奉承的人,他会给予不真诚的奉承。”

“永远不要害怕内部相残。”

“与其被别人取代,不如自己取代自己。”---史蒂夫·乔布斯

“自然喜欢简洁与统一。”---天文学家约翰尼斯·开普勒(Johannes Kepler)

“如果你不忙着求生,你就在忙着求死。”---迪伦