在XAML中引用另一个源文件中的点击方法?
在XAML中引用另一个源文件中的点击方法?
我有一个按钮,它有一个点击方法。我想将该方法移动到另一个CS文件中,以便我可以在其他地方重用它。在XAML中是否可以引用来自Pages源文件之外的CS源文件中的方法,例如点击方法?
我想将DoNotPressTheRedButton_Click定位在另一个源文件ButtonMethods.cs中,然后在我的页面中从XAML中使用它。
MyPage.xaml
为了实现这个,我认为我需要写:
xmlns:helpermethods="using:CoreProject.HelperMethods"
然后,
但是我得到了编译错误... CS1002和CS1513。显然这不是正确的语法。这是否可能?
问题的出现原因是:在XAML中引用其他源文件中的点击方法时,需要找到一个适当的方式来调用该方法。
解决方法是:可以从TheRedButton
的点击处理程序中调用ButtonMethods
中的方法。确保该方法是static
的,否则需要每次创建一个ButtonMethods
类的实例。
以下是实现的代码示例:
private void OnSomebodyClickedTheRedButtonWhenTheyWereNotMeantTo(object sender, RoutedEventArgs args) { // 在此处理程序中执行其他操作,例如确定点击的是哪个按钮等 ButtonMethods.RedButtonClicked(sender, args); }
如果需要更多的控制,可以将事件参数传递给静态的点击处理程序。
在动态创建按钮的情况下,无法编写按钮点击方法,因为没有对它的引用。
在上述内容中,问题的原因是在Windows Universal项目中不支持使用x:Static关键字。解决方法是改用x:Bind关键字来引用另一个源文件中的点击方法。以下是解决方法的具体代码:
Easy peasy:
<Button Click="{x:Bind helpermethods:ButtonMethods.ButtonClick}" />
Or in WPF:
<Button Click="{x:Static helpermethods:ButtonMethods.ButtonClick}" />
C#:
public static class ButtonMethods { public static RoutedEventHandler ButtonClick => Button_Click; public static void Button_Click(object sender, RoutedEventArgs e) { // stuff } }
在Windows Universal项目中,x:Static关键字不受支持,因此无法使用该关键字来引用另一个源文件中的点击方法。解决方法是改用x:Bind关键字来实现相同的功能。通过将点击事件绑定到ButtonMethods类中的ButtonClick属性,可以实现引用另一个源文件中的点击方法。
请注意,上述解决方法是针对Windows Universal项目,如果在其他环境中使用可能会导致错误。如果有关此问题的更多疑问,请参考stackoverflow.com/questions/31963913中的讨论。