Win Phone应用程序:可以使用在另一个页面上声明的事件

本文关键字:声明 事件 另一个 应用程序 Phone 可以使 Win | 更新日期: 2023-09-27 18:00:30

我的场景很简单,事实上我以为它不会造成问题,但它确实会,有人能帮忙吗?

我的MainPage以这个开头:

namespace PhoneApp
{
    public partial class MainPage : PhoneApplicationPage { /* snip */ }
}

页面后面是这个简单的方法:

private void MakeSound(object sender, MouseButtonEventArgs e)

好吧,一切都很好。

但是在我的SettingsSample.xaml上,我有一个ListBoxItem,它通过SelectionChanged属性调用方法MakeSound。VS工作室告诉我在类PhoneApp.SettingsSample'上找不到'事件处理程序MakeSound'

此页面的代码以开头

namespace PhoneApp
{
    public partial class SettingsSample : PhoneApplicationPage { /* snip */ }
}

由于某种原因,复制SettingsPage.xaml.cs上方法的代码不起作用,但我觉得应该可以使用MaingePage.xaml.cs上描述的方法,特别是因为它们各自的代码位于同一命名空间中。

我试着添加

using PhoneApp;

在SettingsSample.xaml.cs上。不是特别聪明,但我对没有其他想法

Win Phone应用程序:可以使用在另一个页面上声明的事件

您的事件函数应该读取EventClickOnMyListBox,并位于页面的代码后面。然后,该函数将调用makeasound函数(您可以将其放在任何需要的位置)。它可以由另一个事件或函数调用。

事件本身和事件的作用之间存在语义上的区别。您的事件不是makeasound,您的事件将导致发出声音,以及其他可能的事情。

如果你想添加一个弹出窗口来添加视觉效果,如果你直接调用makeasound函数,你会被卡住,而在另一种情况下,你只需要在EventClickOnMyListBox中添加一行。

这就是xaml以这种方式工作的原因,它只允许您引用封闭类中的对象(或者,如果有一种方式我不知道/而且从不需要它)。您应该尽量减少代码背后的代码(如果您想在这条路上走得更远,这就是MVVM模式的思维方式)。


回复您的评论,这里有一些代码可以让您开始:

您的事件应该在SettingSample页面的代码后面,并且应该调用makeasound函数,而不是makeasound函数:

private void MenuItem_Click(object sender, MouseButtonEventArgs e)
{
    Whatever.Myclass.MakeASound (blabla); // So typically MakeASound would be static
}

现在,在您的主页中也有同样的事情:您不使用private void MakeSound(object sender, MouseButtonEventArgs e)作为单击的事件,而是使用与上面一样的事件处理程序。

退一步,你会发现这很自然:你想做两件事。但是,由于语言相关的原因(阅读C#和XAML以了解原因),有一件事不能与第一件事完全相同。

因此,您将特性放在第三个组件中,可以从前两个组件访问。你从它们中的每一个调用这个组件。这样,他们都可以共享相同的功能,每个人都很高兴。