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上。不是特别聪明,但我对没有其他想法
您的事件函数应该读取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以了解原因),有一件事不能与第一件事完全相同。
因此,您将特性放在第三个组件中,可以从前两个组件访问。你从它们中的每一个调用这个组件。这样,他们都可以共享相同的功能,每个人都很高兴。