如何使按钮执行MainPage中没有的方法

时间:2019-02-10 20:50:53

标签: c# uwp uwp-xaml

我在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中的方法?还是可能将事件路由到那里?

3 个答案:

答案 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());
        }
    }
}

enter image description here

答案 2 :(得分:0)

执行此操作(及其他操作)的最正确,最佳方法是通过创建MVVM模式并使用大量数据绑定将项目分为三层。

创建一个AppViewModel类(实现INotifyProperyChanged),并在MainPage.cs中为其创建一个字段,还将MainPage类声明为静态字段,并将其用作整个应用程序的“外壳”。 。您很高兴:在AppViewModel中,您可以实现或引用所有其他名称空间。

最诚挚的问候