mirror of
https://github.com/Stone-Red-Code/docs-desktop.git
synced 2026-09-09 07:56:08 +02:00
Content update - Preview events (user story 1878475) (#1332)
* Add article, toc, and redirects * Add a prerequisites section to 3 other event articles * Further edits * Update dotnet-desktop-guide/net/wpf/toc.yml Co-authored-by: Andy (Steve) De George <[email protected]> * Update article links * Minor clarification Co-authored-by: Andy (Steve) De George <[email protected]>
This commit is contained in:
co-authored by
Andy De George
parent
084c3e0ba6
commit
dd0052ecec
@@ -0,0 +1,9 @@
|
||||
<Application x:Class="Application"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:local="clr-namespace:CodeSampleVb"
|
||||
StartupUri="MainWindow.xaml">
|
||||
<Application.Resources>
|
||||
|
||||
</Application.Resources>
|
||||
</Application>
|
||||
@@ -0,0 +1,6 @@
|
||||
Class Application
|
||||
|
||||
' Application-level events, such as Startup, Exit, and DispatcherUnhandledException
|
||||
' can be handled in this file.
|
||||
|
||||
End Class
|
||||
@@ -0,0 +1,9 @@
|
||||
'The ThemeInfo attribute describes where any theme specific and generic resource dictionaries can be found.
|
||||
'1st parameter: where theme specific resource dictionaries are located
|
||||
'(used if a resource is not found in the page,
|
||||
' or application resource dictionaries)
|
||||
|
||||
'2nd parameter: where the generic resource dictionary is located
|
||||
'(used if a resource is not found in the page,
|
||||
'app, and any theme specific resource dictionaries)
|
||||
<Assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)>
|
||||
@@ -0,0 +1,23 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net6.0-windows</TargetFramework>
|
||||
<RootNamespace>CodeSampleVb</RootNamespace>
|
||||
<NeutralLanguage>en-us</NeutralLanguage>
|
||||
<UseWPF>true</UseWPF>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Import Include="System.Windows" />
|
||||
<Import Include="System.Windows.Controls" />
|
||||
<Import Include="System.Windows.Data" />
|
||||
<Import Include="System.Windows.Documents" />
|
||||
<Import Include="System.Windows.Input" />
|
||||
<Import Include="System.Windows.Media" />
|
||||
<Import Include="System.Windows.Media.Imaging" />
|
||||
<Import Include="System.Windows.Navigation" />
|
||||
<Import Include="System.Windows.Shapes" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,23 @@
|
||||
<Window x:Class="MainWindow"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:custom="clr-namespace:CodeSampleVb"
|
||||
Title="Preview events" Height="100" Width="300">
|
||||
|
||||
<!--<CustomControlEventSuppression>-->
|
||||
<StackPanel Name="outerStackPanel"
|
||||
VerticalAlignment="Center"
|
||||
custom:ComponentWrapper.CustomKey="Handler_PrintEventInfo"
|
||||
TextBox.KeyDown="Handler_PrintEventInfo"
|
||||
TextBox.PreviewKeyDown="Handler_PrintEventInfo" >
|
||||
<custom:ComponentWrapper
|
||||
x:Name="componentWrapper"
|
||||
KeyDown="ComponentWrapper_KeyDown"
|
||||
custom:ComponentWrapper.CustomKey="Handler_PrintEventInfo"
|
||||
HorizontalAlignment="Center">
|
||||
<TextBox x:Name="componentTextBox" Width="200" KeyDown="Handler_PrintEventInfo" />
|
||||
</custom:ComponentWrapper>
|
||||
</StackPanel>
|
||||
<!--</CustomControlEventSuppression>-->
|
||||
|
||||
</Window>
|
||||
@@ -0,0 +1,90 @@
|
||||
'<EventSuppressionWorkarounds>
|
||||
Partial Public Class MainWindow
|
||||
Inherits Window
|
||||
|
||||
Public Sub New()
|
||||
InitializeComponent()
|
||||
|
||||
' Attach a handler on outerStackPanel that will be invoked by handled KeyDown events.
|
||||
outerStackPanel.[AddHandler](KeyDownEvent, New RoutedEventHandler(AddressOf Handler_PrintEventInfo),
|
||||
handledEventsToo:=True)
|
||||
End Sub
|
||||
|
||||
Private Sub ComponentWrapper_KeyDown(sender As Object, e As KeyEventArgs)
|
||||
Handler_PrintEventInfo(sender, e)
|
||||
Debug.WriteLine("KeyDown event marked as handled on componentWrapper." &
|
||||
vbCrLf & "CustomKey event raised on componentWrapper.")
|
||||
|
||||
' Mark the event as handled.
|
||||
e.Handled = True
|
||||
|
||||
' Raise the custom click event.
|
||||
componentWrapper.RaiseCustomRoutedEvent()
|
||||
End Sub
|
||||
|
||||
Private Sub Handler_PrintEventInfo(sender As Object, e As KeyEventArgs)
|
||||
Dim senderName As String = CType(sender, FrameworkElement).Name
|
||||
Dim sourceName As String = CType(e.Source, FrameworkElement).Name
|
||||
Dim eventName As String = e.RoutedEvent.Name
|
||||
Dim handledEventsToo As String = If(e.Handled, " Parameter handledEventsToo set to true.", "")
|
||||
Debug.WriteLine($"Handler attached to {senderName} " &
|
||||
$"triggered by {eventName} event raised on {sourceName}.{handledEventsToo}")
|
||||
End Sub
|
||||
|
||||
Private Sub Handler_PrintEventInfo(sender As Object, e As RoutedEventArgs)
|
||||
Dim senderName As String = CType(sender, FrameworkElement).Name
|
||||
Dim sourceName As String = CType(e.Source, FrameworkElement).Name
|
||||
Dim eventName As String = e.RoutedEvent.Name
|
||||
Dim handledEventsToo As String = If(e.Handled, " Parameter handledEventsToo set to true.", "")
|
||||
Debug.WriteLine($"Handler attached to {senderName} " &
|
||||
$"triggered by {eventName} event raised on {sourceName}.{handledEventsToo}")
|
||||
End Sub
|
||||
|
||||
' Debug output
|
||||
'
|
||||
' Handler attached to outerStackPanel triggered by PreviewKeyDown event raised on componentTextBox.
|
||||
' Handler attached to componentTextBox triggered by KeyDown event raised on componentTextBox.
|
||||
' Handler attached to componentWrapper triggered by KeyDown event raised on componentTextBox.
|
||||
' KeyDown event marked as handled on componentWrapper.
|
||||
' CustomKey event raised on componentWrapper.
|
||||
' Handler attached to componentWrapper triggered by CustomKey event raised on componentWrapper.
|
||||
' Handler attached to outerStackPanel triggered by CustomKey event raised on componentWrapper.
|
||||
' Handler attached to outerStackPanel triggered by KeyDown event raised on componentTextBox. Parameter handledEventsToo set to true.
|
||||
End Class
|
||||
|
||||
Public Class ComponentWrapper
|
||||
Inherits StackPanel
|
||||
|
||||
' Register a custom routed event with the Bubble routing strategy.
|
||||
Public Shared ReadOnly CustomKeyEvent As RoutedEvent =
|
||||
EventManager.RegisterRoutedEvent(
|
||||
name:="CustomKey",
|
||||
routingStrategy:=RoutingStrategy.Bubble,
|
||||
handlerType:=GetType(RoutedEventHandler),
|
||||
ownerType:=GetType(ComponentWrapper))
|
||||
|
||||
' Provide CLR accessors to support event handler assignment.
|
||||
Public Custom Event CustomKey As RoutedEventHandler
|
||||
|
||||
AddHandler(value As RoutedEventHandler)
|
||||
[AddHandler](CustomKeyEvent, value)
|
||||
End AddHandler
|
||||
|
||||
RemoveHandler(value As RoutedEventHandler)
|
||||
[RemoveHandler](CustomKeyEvent, value)
|
||||
End RemoveHandler
|
||||
|
||||
RaiseEvent(sender As Object, e As RoutedEventArgs)
|
||||
[RaiseEvent](e)
|
||||
End RaiseEvent
|
||||
|
||||
End Event
|
||||
|
||||
Public Sub RaiseCustomRoutedEvent()
|
||||
' Create a RoutedEventArgs instance & raise the event,
|
||||
' which will bubble up through the element tree.
|
||||
Dim routedEventArgs As New RoutedEventArgs(routedEvent:=CustomKeyEvent)
|
||||
[RaiseEvent](routedEventArgs)
|
||||
End Sub
|
||||
End Class
|
||||
'</EventSuppressionWorkarounds>
|
||||
Reference in New Issue
Block a user