Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
9 / 8 / 2
Регистрация: 20.02.2018
Сообщений: 90
1
UWP

Как из фрейма отработать нажатие кнопки на странице-родителе?

19.01.2019, 10:20. Показов 996. Ответов 4
Метки uwp (Все метки)

Здравствуйте!

Подскажите, пожалуйста, как из страницы во фрейме (Frame) отработать программно нажатие кнопки на странице-родителе (Parent)?
см. рисунок

А также - можно ли это сделать как-то через подписку?

P.S. Почему спрашиваю про event - вот наткнулся на статью:
https://stackoverflow.com/ques... shell-xaml
Но с английским плохо - не могу понять пока о чём в ней речь и как сделать.
Хелп!
Миниатюры
Как из фрейма отработать нажатие кнопки на странице-родителе?  
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.01.2019, 10:20
Ответы с готовыми решениями:

Как из фрейма выйти на метку в родителе
Кликом на батоне в iframe вызываю процедуру родителя, которая в конце содержит где mmm-метка в...

Эмулировать нажатие кнопки мыши или нажатие клавиши на Web - странице
Здравствуйте. Как на эмулировать переходы по страницам на сайте, открытом в Интернет эксплорере!....

Как изменить файл на сервере по реакции на нажатие кнопки на странице?
Всем здравствуйте. Делаю небольшой плагин для WordPress и не могу понять как по нажатию на кнопку...

Как отработать кнопки Ins/Del?
1. как отработать кнопки INS DEL HOME END на форме в гриде по событиям keyup или keydown 2. как...

4
9 / 8 / 2
Регистрация: 20.02.2018
Сообщений: 90
19.01.2019, 10:27  [ТС] 2
Вот проект в архиве.
Вложения
Тип файла: zip Test_003_Event.zip (2.01 Мб, 0 просмотров)
0
1277 / 438 / 150
Регистрация: 05.12.2015
Сообщений: 753
19.01.2019, 11:48 3
Делаешь глобальную команду и пользуй в любых контролах, где есть Command.
Самое простое, неполное решение:
Объявляешь класс команды
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    public class RelayCommand : ICommand
    {
        private Action<object> execute;
        private Func<object, bool> canexecute;
        public RelayCommand ( ) { }
        public virtual bool CanExecute ( object param = null )
        {
            return canexecute == null ? true : canexecute.Invoke ( param );
        }
        public virtual void Execute ( object param = null )
        {
            execute?.Invoke ( param );
        }
        public void setHandlers ( Action exe, Func<bool> can )
        {
            execute = ( param ) => exe ();
            canexecute = ( param ) => can ();
        }
        public event EventHandler CanExecuteChanged
        {
            add
            {
                CommandManager.RequerySuggested += value;
            }
            remove
            {
                CommandManager.RequerySuggested -= value;
            }
        }
    }
В App.xaml добавляешь, только согласовуй пространства имен:
XML
1
<local:RelayCommand x:Key="frameCommand"/>
код в MainWindow
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public MainWindow ( )
        {           
            InitializeComponent ();
            if ( TryFindResource ( "frameCommand" ) is RelayCommand framecommand )
                framecommand.setHandlers ( frameExecute, frameCanExecute );
        }
        void frameExecute ( )
        {
            // handler 
        }
            bool frameCanExecute ( )
        {
            return true; // canexecute handler
        }
Во фрейме на кнопке устанавливаешь команду
XML
1
<Button Content="button" Command="{StaticResource frameCommand}"/>
1
9 / 8 / 2
Регистрация: 20.02.2018
Сообщений: 90
19.01.2019, 12:34  [ТС] 4
Спасибо!
С командами ещё не разбирался - обязательно посмотрю. Особенно в рамках изучения MVVM.

Пока же - для задачи из примера - (методом проб и ошибок ) нашёл вариант с использованием событий:

Для SecondPage:
C#
1
2
3
4
5
6
7
        private void Button2_Click(object sender, RoutedEventArgs e)
        {
            if (NeedPressButton1 != null)
                NeedPressButton1();
        }
 
        public event MyEventHandler NeedPressButton1;  // событие - "Надо нажать Кнопку 1"

Для MainPage:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            
            // Открыть страницу во фрейме
            contentFrame.NavigateToType(typeof(SecondPage), null, new FrameNavigationOptions());
 
            // Получить страницу, открытую во фрейме 
            var contentPage = contentFrame.Content as SecondPage;
 
            // Присвоить событию страницы фрейма (SecondPage) обработчик из основной страницы (MainPage)
            contentPage.NeedPressButton1 += PressButton1;
        }
 
        public delegate void MyEventHandler();  // объявили делегат без параметров
 
        private void PressButton1()  // объявили метод с сигнатурой такой же как у делегата MyEventHandler
        {
            Button_Click(null, null);
        }
Вот заодно и с событиями немного разобрался!
0
Модератор
Эксперт .NET
10862 / 7707 / 2089
Регистрация: 21.04.2018
Сообщений: 23,206
Записей в блоге: 2
19.01.2019, 13:14 5
Цитата Сообщение от Zixi Посмотреть сообщение
С командами ещё не разбирался - обязательно посмотрю. Особенно в рамках изучения MVVM.
Разбирайтесь сразу. Не привыкайте к неправильному кодированию. Этот опыт окажет негативное влияние при изучении правильного использования WPF. Использование WPF без MVVM - это забивание гвоздей микроскопом.
Прочитайте Готовые решения, примеры и рекомендации начинающим на WPF [Элд Хасп]
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2019, 13:14

Нажатие несуществующей кнопки на странице
Доброго времени суток, в процессе написания приложения (for fun) столкнулся с проблемой. На...

Отследить нажатие кнопки на странице в браузере в WinForm
Имеем WinForm, на ней WebBrowser. Можно ли отследить нажатие кнопки на странице в окне браузера?

Имитировать нажатие кнопки мыши на странице загруженной в TChromium
Существует процедура: procedure SendMouseClickEvent(const event: PCefMouseEvent; kind:...

Передача информации о родителе кнопки
Здравствуйте. Есть собственный класс который должен рисовать VCL объект(например кнопку) с...

Макрос "нажатие кнопки" на веб странице
Здравствуйте. Есть код со страницы &lt;A href=&quot;?pool=0&quot;&gt;0&lt;/TD&gt;&lt;td&gt;st3333&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;1FjPnC...

"Нажатие" кнопки на Web-странице
можно ли с помощью компонента IdHTTP нажать кнопку на Web-странице?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru