0

我的场景很简单,实际上我认为它不会引起任何问题,但确实如此,有人可以帮忙吗?

我的MainPage开头是这样的:

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

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

private void MakeSound(object sender, MouseButtonEventArgs e)

好吧,一切都很好。

SettingsSample.xaml我有一个 ListBoxItem 调用方法 MakeSoundviaSelectionChanged属性。VS 工作室告诉我“在类 PhoneApp.SettingsSample 上找不到事件处理程序 MakeSoundis”

此页面的代码以:

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

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

我试图添加

using PhoneApp;

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

4

1 回答 1

0

您的事件函数应该读取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 以了解原因)。

所以你把你的特性放在第三个组件中,可以从前两个组件中访问。你从他们每个人那里调用这个组件。这样,他们都可以共享对相同功能的访问权限,并且每个人都很高兴。

于 2013-02-21T01:55:50.097 回答