|
RoutedEvents
|
|||
---|---|---|---|
#18+
У меня тут вечер занимательного программирования :) Что за фигня: имеем такую разметку xaml <Window x:Class="WPFANI.MainWindow" xmlns=" http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x=" http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d=" http://schemas.microsoft.com/expression/blend/2008" xmlns:mc=" http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WPFANI" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800" UIElement.MouseDown="OnMouseDown" > <Grid IsHitTestVisible="True"> <Grid.RowDefinitions> <RowDefinition Height="24"/> <RowDefinition/> <RowDefinition Height="20"/> </Grid.RowDefinitions> <Menu x:Name="main_menu" Grid.Row="0" ItemsSource="{Binding AllObjects}" IsHitTestVisible="True"/> <Frame x:Name="main_frame" Grid.Row="1"> <Frame.Content> <ListBox x:Name="log"/> </Frame.Content> </Frame> <Button Grid.Row="2" Content="Clear" Width="75" Margin="10,0,707,0" Click="Button_Click"/> </Grid> </Window> код окна MainWindow Код: 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. 31. 32. 33. 34. 35. 36.
Я предполагал что аттачед-событие типа UIElement при нажатии на MenuItem должно маршрутизироваться в виде: MouseDown o:TextBlock s:TextBlock MouseDown o:TextBlock s:ContentPresenter MouseDown o:TextBlock s:Grid MouseDown o:TextBlock s:Border MouseDown o:TextBlock s:MenuItem и.т.д вверх по визуальному дереву. Но тут какая то джигурда оно вообще не отрабатывает при нажатии MenuItem элемента. Он же наследник UIElement какого хрена оно не всплывает? ps кстати кто нибудь подскажет как в тэге "src" сделать выделение куска текста цветом? а то spoiler глаза режет ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 19:29 |
|
RoutedEvents
|
|||
---|---|---|---|
#18+
felix_ff кстати кто нибудь подскажет как в тэге "src" сделать выделение куска текста цветом? а то spoiler глаза режет ну и для оформления XAML очевидно нужно использовать тэг XML ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 19:44 |
|
RoutedEvents
|
|||
---|---|---|---|
#18+
Shocker.Pro, не работает Код: sql 1.
Код: xml 1.
хотя если опустить раскраску xaml то в целом наверное репрезентативно. Shocker.Pro спасибо. из-изначального поста Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 21:18 |
|
RoutedEvents
|
|||
---|---|---|---|
#18+
felix_ff, MSDNThe MenuItem handles the MouseDown event, so if you attach an event handler to MouseDown, your handler will never be called. To add your own handler, subscribe to the PreviewMouseDown event or subscribe to MouseDown by calling AddHandler(RoutedEvent, Delegate, Boolean) with handledEventsToo set to true. https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.menuitem?view=netcore-3.1 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2020, 07:31 |
|
RoutedEvents
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Все равно несколько странно: Код: 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.
Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
При нажатии на кнопку MenuItem в лог пишется: MouseDown obj:MainWindow orig:TextBlock source:MenuItem Handled:True MenuItem:none Видимо я неправильно понимаю устройство системы маршрутизации ибо я ожидал что будет куча строк ведь почти каждый элемент является наследником UIElement. Handled мы явно устанавливаем в false, да и AddHandler применяем c handledEventsToo = true; Обработчик срабатывает один раз? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2020, 14:54 |
|
RoutedEvents
|
|||
---|---|---|---|
#18+
felix_ff я ожидал что будет куча строк ведь почти каждый элемент является наследником UIElement. Обработчик события в данном случае только один, и он почти на самой верхушке визуального дерева - на окне, все элементы вниз по структуре визуального дерева обработчика не имеют, и просто пробрасывают событие дальше вверх. Ни AddHandler, ни просто установка MouseDown в xaml-разметке не вешают обработчики на всю иерархию дерева, они вешают обработчик ровно на то, что указано - на окно. Он и отрабатывает один раз, когда положено. Я с трудом могу представить, зачем вышеприведенное может понадобиться на практике, но если целью является просто посмотреть, как всплывает событие, то можно пройтись вверх по визуальному дереву самому, и прицепить обработчик ко всему, что попадётся: Код: xml 1. 2. 3.
Код: 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.
Тогда в консольном выводе будет вот такое: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
- после загрузки окна, и Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
- при клике по MenuItem ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2020, 17:55 |
|
RoutedEvents
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, Догнал, большое спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2020, 19:31 |
|
RoutedEvents
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5.
можно вот так, глобально :D ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2020, 07:29 |
|
|
start [/forum/topic.php?fid=21&tid=1440262]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
75ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 243ms |
total: | 413ms |
0 / 0 |