我在MainPage中有一个按钮,我想执行另一个类(Shelf.cs)中存在的方法
我尝试做click =“ local:Button_click”(local = using:Shelf),但它没有让我,并一直想添加“新事件处理程序”
MainPage.xaml中的按钮:
<Button x:Name="AddBookButton" Width="150" Height="150" Margin="675,0,0,0" click="Button_click"> // this creates a new method inside MainPage
Shelf.cs中的方法:
public async void Button_Click(object sender, RoutedEventArgs e)
{
StackPanel adddialog = new StackPanel
{
Orientation = Orientation.Horizontal,
Width = 484,
FlowDirection = FlowDirection.RightToLeft
};
TextBox title = new TextBox
{
Header = "العنوان:",
PlaceholderText = "عنوان الكتاب",
Width = 156,
Margin = new Thickness(0, 0, 8, 0),
FlowDirection = FlowDirection.RightToLeft
};
TextBox author = new TextBox
{
Header = "المؤلف:",
PlaceholderText = "مؤلف الكتاب",
Width = 156,
Margin = new Thickness(0, 0, 8, 0),
FlowDirection = FlowDirection.RightToLeft
};
TextBox publisher = new TextBox
{
Header = "الناشر (اختياري):",
PlaceholderText = "ناشر الكتاب",
Width = 156,
Margin = new Thickness(0, 0, 0, 0),
FlowDirection = FlowDirection.RightToLeft
};
adddialog.Children.Insert(0, title);
adddialog.Children.Insert(1, author);
adddialog.Children.Insert(2, publisher);
ContentDialog addFileDialog = new ContentDialog
{
Title = "أضف بيانات الكتاب الجديد",
Content = adddialog,
PrimaryButtonText = "إضافة",
CloseButtonText = "إلغاء",
FlowDirection = FlowDirection.RightToLeft,
Width = 700
};
ContentDialogResult result = await addFileDialog.ShowAsync();
if (result == ContentDialogResult.Primary)
{
Book book = new Book()
{
Title = title.Text,
Author = author.Text,
};
try
{
book.Publisher = publisher.Text;
}
catch { }
Books.Add(book);
AddBookButton.Visibility = Visibility.Collapsed;
}
}
}
如何使其进入shelf.cs中的方法?还是可能将事件路由到那里?
答案 0 :(得分:0)
如果即时通讯工具理解了您要说的话,您就无法真正做到您想做的事(据我所知)...但是,您可以在邮件文件中创建按钮单击方法,然后调用另一个一个单独的类文件中的方法。
如果我在理解您的要求时错了,那么请您进一步解释一下吗?
答案 1 :(得分:0)
您需要在Shelf
类中实例化MainForm
类,然后调用Shelf::ShelfMethod
。名字是我的名字-请参阅下面的示例代码。我的笔记本电脑尚无法执行UWP
(需要升级到Windows 1809),但这是一个Winforms
的示例。我认为实例化类和调用方法的基础可能都相同
在表单上,添加名为button
的{{1}}和名为objButton
的{{1}}
我将表单类命名为textbox
我将项目命名为objTextBox
Program.cs
MainForm
MainPage.cs
CallOtherClassMethod
Shelf.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CallOtherClassMethod
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainPage());
}
}
}
答案 2 :(得分:0)
执行此操作(及其他操作)的最正确,最佳方法是通过创建MVVM模式并使用大量数据绑定将项目分为三层。
创建一个AppViewModel类(实现INotifyProperyChanged),并在MainPage.cs中为其创建一个字段,还将MainPage类声明为静态字段,并将其用作整个应用程序的“外壳”。 。您很高兴:在AppViewModel中,您可以实现或引用所有其他名称空间。
最诚挚的问候