Форум программистов, компьютерный форум, киберфорум
Наши страницы

C#: WPF, UWP и Silverlight

Войти
Регистрация
Восстановить пароль
 
Ardemor
0 / 0 / 0
Регистрация: 21.10.2015
Сообщений: 8
#1

Вызвать обработчик события внутри другого обработчика - C# WPF

21.10.2015, 00:54. Просмотров 306. Ответов 2
Метки нет (Все метки)

У окна есть обработчик Loaded="Window_Loaded", который мониторит состояние всего окна. Нужно чтобы Window_Loaded смотрел какой контрол обращается и направлял в нужное место. Не знаю как реализовать на шарпе, на VB нашел - работает.

Вот разметка:
XML
1
2
3
4
5
6
7
8
9
<Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Style="{StaticResource MyWindowsStyle}"
        Title="Lalala" Height="600" Width="525" WindowStartupLocation="CenterScreen" ResizeMode="CanResizeWithGrip"
        Loaded="Window_Loaded">
    <Grid>
        
    </Grid>
</Window>
А вот так выглядид обработчик на VB:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub Window_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs)
        AddHandler CType(Me.Template.FindName("MinimazeWindow", Me), Border).MouseDown, AddressOf MinimazeWindow_MouseDown
        AddHandler CType(Me.Template.FindName("MaximumWindow", Me), Border).MouseDown, AddressOf MaximumWindow_MouseDown
        AddHandler CType(Me.Template.FindName("CloseWindow", Me), Border).MouseDown, AddressOf CloseWindow_MouseDown
        AddHandler CType(Me.Template.FindName("Zagolovok", Me), Border).MouseDown, AddressOf Zagolovok_MouseDown
        AddHandler CType(Me.Template.FindName("Zagolovok", Me), Border).MouseLeftButtonDown, AddressOf Zagolovok_MouseLeftButtonDown
        Dim dlg As New DialogWindow
        dlg.WindowStartupLocation = Windows.WindowStartupLocation.CenterScreen
        dlg.ShowDialog()
    End Sub
Пытался перенаправлять с помощью AddHandler в шарпе, не получается. Подскажите, как реализовать данный метод на C#? Или посоветуйте как все это сделать с одним "главным" обработчиком?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2015, 00:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вызвать обработчик события внутри другого обработчика (C# WPF):

Как вызвать обработчик события из другого класса? - C# WPF
Допустим есть проект, состоящий из: Window1.xaml Window1.xaml.cs App.xaml App.xaml.cs В ресурсах App.xaml среди прочего...

Лямбда обработчик события. Нужно вернуть значение вовне обработчика, во внешний код - C#
Я хочу сделать как-то так: Uri GetUriBlaBlaBla() { var wb = new WebBrowser(); wb.Navigated += (s, e2) =&gt; { return...

Отмена обработчика события - C#
Я разрабатываю калькулятор (все через это прошли наверно). Когда я в поле для ввода ввожу цифру на это событие (textChanged) реагирует...

Отладка обработчика события GotFocus - C# WPF
Требуется отладить обработчик события GotFocus у некоторого элемента. В интерфейсе пользователя нужно создать определенную...

Как обратится к форме из обработчика события? - C#
есть слушатель на завершение: WebClient user = new WebClient(); user.DownloadFileCompleted += new...

Привязка обработчика из другого класса - C# WPF
Доброго вечера, форумчане! Есть такая проблемка: в моём проекте есть несколько форм, у каждой формы есть свои обработчики событий. В...

2
ViterAlex
6100 / 3317 / 1012
Регистрация: 11.02.2013
Сообщений: 7,323
Завершенные тесты: 3
21.10.2015, 03:24 #2
Цитата Сообщение от Ardemor Посмотреть сообщение
У окна есть обработчик Loaded="Window_Loaded", который мониторит состояние всего окна.
Ничего он не мониторит, а выполняется один раз, по окончании загрузки окна.
Примерно так можно назначить события именованным элементам
C#
1
2
3
4
5
((Border)this.Template.FindName("MinimazeWindow", this)).MouseDown += MinimazeWindow_MouseDown;
((Border)this.Template.FindName("MaximumWindow", this)).MouseDown += MaximumWindow_MouseDown;
((Border)this.Template.FindName("CloseWindow", this)).MouseDown += CloseWindow_MouseDown;
((Border)this.Template.FindName("Zagolovok", this)).MouseDown += Zagolovok_MouseDown;
((Border)this.Template.FindName("Zagolovok", this)).MouseLeftButtonDown += Zagolovok_MouseLeftButtonDown;
Подразумевается, что методы, стоящие справа от знака +=, определены в том же классе, в котором вызывается событие Loaded
Но почему не назначить эти события сразу в дизайнере?
1
Ardemor
0 / 0 / 0
Регистрация: 21.10.2015
Сообщений: 8
21.10.2015, 04:32  [ТС] #3
Да, понял что один раз.
Но почему не назначить эти события сразу в дизайнере?
Дело в том, что я создал файл с ресурсом, там стиль окна MyWindowsStyle, и вся стандартная разметка окна находится там же. Но я не знаю как мне в файле ресурсов назначить события элементам - не дает. События нужны для стандартных элементов управления окном. Можно как-нибудь связать файл стиля с .cs?
Может я перемудрил, просто хочется вынести дизайн окон в отдельный файл. Подскажите, на правильном ли я пути?)

Файл разметки в первом посте.
Файл со стилем:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="WpfApplication.Themes.WindowsStyle">
 
    <SolidColorBrush x:Key="TitleBarBackgroundBrush" Color="#FF648FAE" />
    
    <Style x:Key="MyWindowsStyle" TargetType="{x:Type Window}">
        <Setter Property="SnapsToDevicePixels" Value="true"/>
        <Setter Property="WindowStyle" Value="None"/>
        <Setter Property="AllowsTransparency" Value="True"/>
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Window}">
                    <Border Name="TitleBorder" BorderBrush="#FF648FAE" BorderThickness="1" Background="White" Margin="2">
                        <Border.BitmapEffect>
                            <DropShadowBitmapEffect ShadowDepth="0" Softness="0.1"/>
                        </Border.BitmapEffect>
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="*"/>
                            </Grid.RowDefinitions>
                            <AdornerDecorator Margin="0,5,0,0" Grid.Row="1">
                                <ContentPresenter />
                            </AdornerDecorator>
                            <ResizeGrip x:Name="WindowResizeGrip" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Bottom" Visibility="Collapsed" IsTabStop="false"/>
 
                            <!-- #FF8B8B8B Gray -->
                            <StackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="7,7,10,7" Panel.ZIndex="2">
                                <Border Style="{StaticResource MMM}" Name="MinimazeWindow" Margin="0,0,8,0" Visibility="Collapsed">
                                    <Border Margin="2" BorderThickness="0,0,0,2"/>
                                </Border>
                                <Border  Name="MaximumWindow" Height="17" Width="17" Margin="0,0,8,0" Visibility="Collapsed" Background="Transparent">
                                    <Border Margin="2" BorderBrush="#FFFBF8F8" BorderThickness="1,2,1,1"/>
                                </Border>
                                <Border  Name="CloseWindow" Height="17" Width="17" Background="Transparent">
                                    <Viewbox VerticalAlignment="Bottom" Margin="2">
                                        <Grid>
                                            <Line Stroke="#FFFBF8F8" StrokeThickness="1" X1="0" X2="7" Y2="7"/>
                                            <Line Stroke="#FFFBF8F8" StrokeThickness="1" X1="0" X2="7" Y1="7"/>
                                        </Grid>
                                    </Viewbox>
                                </Border>
                            </StackPanel>
 
                            <!-- #FF648FAE Telegramm -->
                            <Border Name="Zagolovok" VerticalAlignment="Top" Height="30" Visibility="Collapsed" Background ="{StaticResource TitleBarBackgroundBrush}"></Border>
 
                            <StackPanel Margin="7,6,0,0" Orientation="Horizontal" VerticalAlignment="Top">
                                <Image Source="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Icon}" Height="16" VerticalAlignment="Center"></Image>
                                <TextBlock Margin="8,0,0,0" Foreground="#FFFBF8F8" VerticalAlignment="Center" FontSize="14" Name="TitleText" FontFamily="Tahoma"><Run Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Title}"/></TextBlock>
                            </StackPanel>
                        </Grid>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="ResizeMode" Value="CanResizeWithGrip">
                            <Setter TargetName="WindowResizeGrip" Property="Visibility" Value="Visible" />
                            <Setter TargetName="MinimazeWindow" Property="Visibility" Value="Visible" />
                            <Setter TargetName="MaximumWindow" Property="Visibility" Value="Visible" />
                            <Setter TargetName="Zagolovok" Property="Visibility" Value="Visible" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
 
</ResourceDictionary>
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2015, 04:32
Привет! Вот еще темы с ответами:

Вызов единственного обработчика события при переопределении - C# WPF
Все привет! Вопрос по теории. Можно ли как-то сделать так, чтобы при перекрытии обработчика события вызывался он единственный? Скажем...

Обработчик события - C#
Подскажите, пожалуйста, как в обработчике события записать условие: если событие происходит в первый раз, то... , иначе ...

Обработчик события - C#
Как в обработчике события к примеру CellContentDoubleClick в нутри контрола вызвать новое событие и перехватить его в форме? ...

вызвать на исполнение Http-обработчик на сервере - C# WPF
привет. на веб-сервере у меня есть htppHandler в котором генерится капча. на клиенте я успешно получаю эту капчу. все работает, но только я...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.