проверить, нажата ли кнопка в другом окне - PullRequest
0 голосов
/ 10 сентября 2018

Я хочу открыть окно, если кнопка нажата, и эта кнопка находится в другом окне. Так как проверить, нажата ли кнопка в другом окне или нет?

Теперь я кодирую в классе под названием 'RightButton.cs' Я хочу открыть окно под названием «PopUp», когда нажата кнопка «Добавить» в окне «Причина».

PaidOutReason paid = new PaidOutReason(trnprt, apiParameters); 

paid.ShowDialog(); 

if (paid.btnSave.ClickMode == new ClickMode()) 
{ 
    PopUpBanks popu = new PopUpBanks(this); 
    popu.Show(); 
}

Этот работал отлично, но мне пришлось удалить ShowDialog () и заменить его на Show (). Тогда это не сработало.

Это для системы POS. Он имеет пользовательский элемент управления под названием «Клавиатура». Когда открывается окно «Причина», эту клавиатуру также нужно открыть. Поэтому мне пришлось заменить ShowDialog () на Show ().

Ответы [ 5 ]

0 голосов
/ 13 сентября 2018

Вместо окна клавиатуры я сделал его пользовательским элементом управления, а затем инициализировал там событие. Затем я вставляю пользовательский элемент управления Keyboard в окно PaidOutReason и затем вызываю событие. Тогда я смог использовать ShowDialog () для вызова окна.

0 голосов
/ 11 сентября 2018

Обработка события Click из btnSave:

PaidOutReason paid = new PaidOutReason(trnprt, apiParameters);
paid.btnSave.Click += (ss, ee) => 
{
    PopUpBanks popu = new PopUpBanks(this);
    popu.Show();
};
paid.Show();
0 голосов
/ 10 сентября 2018

Вы можете использовать статические элементы управления в вашем приложении. Начните с объявления статического объекта окна в App.xaml.cs, например

public static PaidOutReason paidOutWindow;

затем, в методе конструктора приложения, после InitializingComponent () , инициализировать класс статического окна:

paidOutWindow = new PaidOutReason();

Вы можете задаться вопросом, что это дает вам. Поскольку это POS-приложение, вы, вероятно, будете использовать один и тот же набор окон довольно часто и многократно, что означает, что вы можете удерживать объект окна в памяти и ссылаться на него (и изменять при необходимости). Кроме того, после этого вы получите доступ ко всем структурам внутри PaidOutReason объекта, набрав

App.paidOutWindow.FunctionName();

и, наконец, у вас должен быть доступ ко всем оконным функциям, таким как ShowDialog () .

0 голосов
/ 10 сентября 2018

Если вы используете шаблон MVVM, то вы можете использовать привязку команды для отображения окна PopupBanks. Например:

public class ViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public ICommand AddCommand { get; set; }

        public ViewModel()
        {
            AddCommand = new RelayCommand(AddCommandHandler);

        }

        private void AddCommandHandler()
        {
            IPopUpBanks popu = new PopUpBanks(this);
            popu.Show();
        }
    }

PaidOutReason просмотр: 1. <Button x:Name="Add" Command={Binding AddCommand}/> 2. Установите вышеприведенную модель представления в качестве datacontext представления PaidOutReason.

Создайте интерфейс IPopUpBanks, содержащий метод Show (), и реализуйте этот интерфейс в PopUpBanks view.

0 голосов
/ 10 сентября 2018

Я бы добавил событие в окно и привязал к нему обработчик события.

class WndWindow{
    BtnPaid_Click(object sender, EventArgs e){
        using(var paid = new PaidOutReason()){
            paid.BtnAddClick += Paid_BtnAddClick;
            paid.ShowDialog();
            paid.BtnAddClick -= Paid_BtnAddClick;
        }
    }

    Paid_BtnAddClick(object sender, EventArgs e){
        var popu = new PopUpBanks();
        popu.Show();
    }
}

class PaidOutReason{
    public event EventHandler BtnAddClick;

    BtnAdd_Click(object sender, EventArgs e){
        //Do standard event handler code

        BtnAddClick?.Invoke(this, e);
    }
}

Если вам нужно выполнить какие-либо проверки, вы можете сделать это до прочтения события и просто вернуться, если проверки не пройдены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...