 Great. Thanks. When using the unchanged xaml file I get an error saying internal isn't a VB option
Imports System.Runtime.InteropServices
Imports System.Windows
Imports System.Windows.Data
Imports System.Windows.Controls
Imports System.Windows.Controls.Primitives
Imports System.Windows.Input
Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Shapes
Namespace VirtualKeyboard
Friend Partial Class PopupKeyboardUserControl
Inherits UserControl
#Region "Private data"
Private _parentPopup As Popup
Private storyboard As Storyboard
Private Const AnimationDelay As Double = 150
#End Region
#Region "Constructor"
Public Sub New()
InitializeComponent()
End Sub
#End Region
#Region "Properties"
Public Shared ReadOnly PlacementProperty As DependencyProperty = Popup.PlacementProperty.AddOwner(GetType(PopupKeyboardUserControl))
Public Property Placement() As PlacementMode
Get
Return DirectCast(GetValue(PlacementProperty), PlacementMode)
End Get
Set
SetValue(PlacementProperty, value)
End Set
End Property
Public Shared ReadOnly PlacementTargetProperty As DependencyProperty = Popup.PlacementTargetProperty.AddOwner(GetType(PopupKeyboardUserControl))
Public Property PlacementTarget() As UIElement
Get
Return DirectCast(GetValue(PlacementTargetProperty), UIElement)
End Get
Set
SetValue(PlacementTargetProperty, value)
End Set
End Property
Public Shared ReadOnly PlacementRectangleProperty As DependencyProperty = Popup.PlacementRectangleProperty.AddOwner(GetType(PopupKeyboardUserControl))
Public Property PlacementRectangle() As Rect
Get
Return DirectCast(GetValue(PlacementRectangleProperty), Rect)
End Get
Set
SetValue(PlacementRectangleProperty, value)
End Set
End Property
Public Shared ReadOnly HorizontalOffsetProperty As DependencyProperty = Popup.HorizontalOffsetProperty.AddOwner(GetType(PopupKeyboardUserControl))
Public Property HorizontalOffset() As Double
Get
Return CDbl(GetValue(HorizontalOffsetProperty))
End Get
Set
SetValue(HorizontalOffsetProperty, value)
End Set
End Property
Public Shared ReadOnly VerticalOffsetProperty As DependencyProperty = Popup.VerticalOffsetProperty.AddOwner(GetType(PopupKeyboardUserControl))
Public Property VerticalOffset() As Double
Get
Return CDbl(GetValue(VerticalOffsetProperty))
End Get
Set
SetValue(VerticalOffsetProperty, value)
End Set
End Property
Public Shared ReadOnly StaysOpenProperty As DependencyProperty = Popup.StaysOpenProperty.AddOwner(GetType(PopupKeyboardUserControl))
Public Property StaysOpen() As Boolean
Get
Return CBool(GetValue(StaysOpenProperty))
End Get
Set
SetValue(StaysOpenProperty, value)
End Set
End Property
Public Shared ReadOnly CustomPopupPlacementCallbackProperty As DependencyProperty = Popup.CustomPopupPlacementCallbackProperty.AddOwner(GetType(PopupKeyboardUserControl))
Public Property CustomPopupPlacementCallback() As CustomPopupPlacementCallback
Get
Return DirectCast(GetValue(CustomPopupPlacementCallbackProperty), CustomPopupPlacementCallback)
End Get
Set
SetValue(CustomPopupPlacementCallbackProperty, value)
End Set
End Property
Public Shared ReadOnly IsOpenProperty As DependencyProperty = Popup.IsOpenProperty.AddOwner(GetType(PopupKeyboardUserControl), New FrameworkPropertyMetadata(False, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, New PropertyChangedCallback(AddressOf IsOpenChanged)))
Public Property IsOpen() As Boolean
Get
Return CBool(GetValue(IsOpenProperty))
End Get
Set
SetValue(IsOpenProperty, value)
End Set
End Property
Public Shared ReadOnly StateProperty As DependencyProperty = DependencyProperty.Register("State", GetType(KeyboardState), GetType(PopupKeyboardUserControl), New FrameworkPropertyMetadata(KeyboardState.Normal, New PropertyChangedCallback(AddressOf StateChanged)))
Public Property State() As KeyboardState
Get
Return CType(GetValue(StateProperty), KeyboardState)
End Get
Set
SetValue(StateProperty, value)
End Set
End Property
Public Shared ReadOnly NormalHeightProperty As DependencyProperty = DependencyProperty.Register("NormalHeight", GetType(Double), GetType(PopupKeyboardUserControl), New FrameworkPropertyMetadata(0.0))
Public Property NormalHeight() As Double
Get
Return CDbl(GetValue(NormalHeightProperty))
End Get
Set
SetValue(NormalHeightProperty, value)
End Set
End Property
Public Shared ReadOnly NormalWidthProperty As DependencyProperty = DependencyProperty.Register("NormalWidth", GetType(Double), GetType(PopupKeyboardUserControl), New FrameworkPropertyMetadata(0.0))
Public Property NormalWidth() As Double
Get
Return CDbl(GetValue(NormalWidthProperty))
End Get
Set
SetValue(NormalWidthProperty, value)
End Set
End Property
#End Region
#Region "Private Methods"
Private Shared Sub IsOpenChanged(element As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim ctrl As PopupKeyboardUserControl = DirectCast(element, PopupKeyboardUserControl)
If CBool(e.NewValue) Then
If ctrl._parentPopup Is Nothing Then
ctrl.HookupParentPopup()
End If
End If
End Sub
Private Sub HookupParentPopup()
_parentPopup = New Popup()
_parentPopup.AllowsTransparency = True
_parentPopup.PopupAnimation = PopupAnimation.Scroll
Me.Height = Me.NormalHeight
Me.Width = Me.NormalWidth
Popup.CreateRootPopup(_parentPopup, Me)
End Sub
Private Shared Sub StateChanged(element As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim ctrl As PopupKeyboardUserControl = DirectCast(element, PopupKeyboardUserControl)
If CType(e.NewValue, KeyboardState) = KeyboardState.Normal Then
ctrl.IsOpen = True
ElseIf CType(e.NewValue, KeyboardState) = KeyboardState.Hidden Then
ctrl.HideKeyboard()
End If
End Sub
Private Sub HideKeyboard()
Me.RegisterName("HidePopupKeyboard", Me)
storyboard = New Storyboard()
storyboard.Completed += New EventHandler(AddressOf storyboard_Completed)
Dim widthAnimation As New DoubleAnimation()
widthAnimation.From = Me.NormalWidth
widthAnimation.[To] = 0.0
widthAnimation.Duration = TimeSpan.FromMilliseconds(AnimationDelay)
widthAnimation.FillBehavior = FillBehavior.[Stop]
Dim heightAnimation As New DoubleAnimation()
heightAnimation.From = Me.NormalHeight
heightAnimation.[To] = 0.0
heightAnimation.Duration = TimeSpan.FromMilliseconds(AnimationDelay)
heightAnimation.FillBehavior = FillBehavior.[Stop]
Storyboard.SetTargetName(widthAnimation, "HidePopupKeyboard")
Storyboard.SetTargetProperty(widthAnimation, New PropertyPath(PopupKeyboardUserControl.WidthProperty))
Storyboard.SetTargetName(heightAnimation, "HidePopupKeyboard")
Storyboard.SetTargetProperty(heightAnimation, New PropertyPath(PopupKeyboardUserControl.HeightProperty))
storyboard.Children.Add(widthAnimation)
storyboard.Children.Add(heightAnimation)
storyboard.Begin(Me)
End Sub
Private Sub storyboard_Completed(sender As Object, e As EventArgs)
Me.IsOpen = False
End Sub
#End Region
#Region "Public Methods"
Public Sub LocationChange()
If Me._parentPopup IsNot Nothing Then
Me.IsOpen = False
_parentPopup.PopupAnimation = PopupAnimation.None
Me.IsOpen = True
_parentPopup.PopupAnimation = PopupAnimation.Scroll
End If
End Sub
#End Region
#Region "Keyboard Constants"
Private Const KEYEVENTF_KEYUP As UInteger = &H2
Private Const VK_BACK As Byte = &H8
Private Const VK_LEFT As Byte = &H25
Private Const VK_RIGHT As Byte = &H27
Private Const VK_0 As Byte = &H30
Private Const VK_1 As Byte = &H31
Private Const VK_2 As Byte = &H32
Private Const VK_3 As Byte = &H33
Private Const VK_4 As Byte = &H34
Private Const VK_5 As Byte = &H35
Private Const VK_6 As Byte = &H36
Private Const VK_7 As Byte = &H37
Private Const VK_8 As Byte = &H38
Private Const VK_9 As Byte = &H39
#End Region
#Region "Keyboard Private Methods"
Private Sub cmdNumericButton_Click(sender As Object, e As RoutedEventArgs)
Try
Dim key As Button = DirectCast(sender, Button)
Select Case key.Name
Case "btn010300"
keybd_event(VK_1, 0, 0, CType(0, UIntPtr))
keybd_event(VK_1, 0, KEYEVENTF_KEYUP, CType(0, UIntPtr))
e.Handled = True
Exit Select
Case "btn010301"
keybd_event(VK_2, 0, 0, CType(0, UIntPtr))
keybd_event(VK_2, 0, KEYEVENTF_KEYUP, CType(0, UIntPtr))
e.Handled = True
Exit Select
Case "btn010302"
keybd_event(VK_3, 0, 0, CType(0, UIntPtr))
keybd_event(VK_3, 0, KEYEVENTF_KEYUP, CType(0, UIntPtr))
e.Handled = True
Exit Select
Case "btn010200"
keybd_event(VK_4, 0, 0, CType(0, UIntPtr))
keybd_event(VK_4, 0, KEYEVENTF_KEYUP, CType(0, UIntPtr))
e.Handled = True
Exit Select
Case "btn010201"
keybd_event(VK_5, 0, 0, CType(0, UIntPtr))
keybd_event(VK_5, 0, KEYEVENTF_KEYUP, CType(0, UIntPtr))
e.Handled = True
Exit Select
Case "btn010202"
keybd_event(VK_6, 0, 0, CType(0, UIntPtr))
keybd_event(VK_6, 0, KEYEVENTF_KEYUP, CType(0, UIntPtr))
e.Handled = True
Exit Select
Case "btn010100"
keybd_event(VK_7, 0, 0, CType(0, UIntPtr))
keybd_event(VK_7, 0, KEYEVENTF_KEYUP, CType(0, UIntPtr))
e.Handled = True
Exit Select
Case "btn010101"
keybd_event(VK_8, 0, 0, CType(0, UIntPtr))
keybd_event(VK_8, 0, KEYEVENTF_KEYUP, CType(0, UIntPtr))
e.Handled = True
Exit Select
Case "btn010102"
keybd_event(VK_9, 0, 0, CType(0, UIntPtr))
keybd_event(VK_9, 0, KEYEVENTF_KEYUP, CType(0, UIntPtr))
e.Handled = True
Exit Select
Case "btn010400"
keybd_event(VK_0, 0, 0, CType(0, UIntPtr))
keybd_event(VK_0, 0, KEYEVENTF_KEYUP, CType(0, UIntPtr))
e.Handled = True
Exit Select
Case "btn010103"
keybd_event(&Hbd, 0, 0, CType(0, UIntPtr))
keybd_event(&Hbd, 0, KEYEVENTF_KEYUP, CType(0, UIntPtr))
e.Handled = True
Exit Select
Case "btn010402"
keybd_event(VK_BACK, 0, 0, CType(0, UIntPtr))
keybd_event(VK_BACK, 0, KEYEVENTF_KEYUP, CType(0, UIntPtr))
e.Handled = True
Exit Select
Case "btn010203"
keybd_event(VK_LEFT, 0, 0, CType(0, UIntPtr))
keybd_event(VK_LEFT, 0, KEYEVENTF_KEYUP, CType(0, UIntPtr))
e.Handled = True
Exit Select
Case "btn010303"
keybd_event(VK_RIGHT, 0, 0, CType(0, UIntPtr))
keybd_event(VK_RIGHT, 0, KEYEVENTF_KEYUP, CType(0, UIntPtr))
e.Handled = True
Exit Select
Case "btn010401"
keybd_event(&Hbe, 0, 0, CType(0, UIntPtr))
keybd_event(&Hbe, 0, KEYEVENTF_KEYUP, CType(0, UIntPtr))
e.Handled = True
Exit Select
End Select
Catch
End Try
End Sub
Private Sub CloseButton_Click(sender As Object, e As RoutedEventArgs)
Me.State = KeyboardState.Hidden
End Sub
#End Region
#Region "Windows API Functions"
<DllImport("user32.dll", CharSet := CharSet.Auto)> _
Private Shared Sub keybd_event(bVk As Byte, bScan As Byte, dwFlags As UInteger, dwExtraInfo As UIntPtr)
End Sub
#End Region
End Class
Public NotInheritable Class PopupKeyboard
Private Sub New()
End Sub
#Region "Private data"
Private Shared _popupKeyboardUserControl As PopupKeyboardUserControl
Private Shared ReadOnly MinimumWidth As Double = 180.0
Private Shared ReadOnly MinimumHeight As Double = 200.0
#End Region
#Region "Public Attached Properties"
Public Shared ReadOnly PlacementProperty As DependencyProperty = DependencyProperty.RegisterAttached("Placement", GetType(PlacementMode), GetType(PopupKeyboard), New FrameworkPropertyMetadata(PlacementMode.Bottom, New PropertyChangedCallback(PopupKeyboard.OnPlacementChanged)))
<AttachedPropertyBrowsableForType(GetType(FrameworkElement))> _
Public Shared Function GetPlacement(element As DependencyObject) As PlacementMode
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
Return DirectCast(element.GetValue(PlacementProperty), PlacementMode)
End Function
Public Shared Sub SetPlacement(element As DependencyObject, value As PlacementMode)
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
element.SetValue(PlacementProperty, value)
End Sub
Public Shared ReadOnly PlacementTargetProperty As DependencyProperty = DependencyProperty.RegisterAttached("PlacementTarget", GetType(UIElement), GetType(PopupKeyboard), New FrameworkPropertyMetadata(Nothing, New PropertyChangedCallback(AddressOf PopupKeyboard.OnPlacementTargetChanged)))
<AttachedPropertyBrowsableForType(GetType(FrameworkElement))> _
Public Shared Function GetPlacementTarget(element As DependencyObject) As UIElement
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
Return DirectCast(element.GetValue(PlacementTargetProperty), UIElement)
End Function
Public Shared Sub SetPlacementTarget(element As DependencyObject, value As UIElement)
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
element.SetValue(PlacementTargetProperty, value)
End Sub
Public Shared ReadOnly PlacementRectangleProperty As DependencyProperty = DependencyProperty.RegisterAttached("PlacementRectangle", GetType(Rect), GetType(PopupKeyboard), New FrameworkPropertyMetadata(Rect.Empty, New PropertyChangedCallback(AddressOf PopupKeyboard.OnPlacementRectangleChanged)))
<AttachedPropertyBrowsableForType(GetType(FrameworkElement))> _
Public Shared Function GetPlacementRectangle(element As DependencyObject) As Rect
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
Return DirectCast(element.GetValue(PlacementRectangleProperty), Rect)
End Function
Public Shared Sub SetPlacementRectangle(element As DependencyObject, value As Rect)
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
element.SetValue(PlacementRectangleProperty, value)
End Sub
Public Shared ReadOnly HorizontalOffsetProperty As DependencyProperty = DependencyProperty.RegisterAttached("HorizontalOffset", GetType(Double), GetType(PopupKeyboard), New FrameworkPropertyMetadata(0.0, New PropertyChangedCallback(AddressOf PopupKeyboard.OnHorizontalOffsetChanged)))
<AttachedPropertyBrowsableForType(GetType(FrameworkElement))> _
Public Shared Function GetHorizontalOffset(element As DependencyObject) As Double
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
Return CDbl(element.GetValue(HorizontalOffsetProperty))
End Function
Public Shared Sub SetHorizontalOffset(element As DependencyObject, value As Double)
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
element.SetValue(HorizontalOffsetProperty, value)
End Sub
Public Shared ReadOnly VerticalOffsetProperty As DependencyProperty = DependencyProperty.RegisterAttached("VerticalOffset", GetType(Double), GetType(PopupKeyboard), New FrameworkPropertyMetadata(0.0, New PropertyChangedCallback(AddressOf PopupKeyboard.OnVerticalOffsetChanged)))
<AttachedPropertyBrowsableForType(GetType(FrameworkElement))> _
Public Shared Function GetVerticalOffset(element As DependencyObject) As Double
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
Return CDbl(element.GetValue(VerticalOffsetProperty))
End Function
Public Shared Sub SetVerticalOffset(element As DependencyObject, value As Double)
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
element.SetValue(VerticalOffsetProperty, value)
End Sub
Public Shared ReadOnly CustomPopupPlacementCallbackProperty As DependencyProperty = DependencyProperty.RegisterAttached("CustomPopupPlacementCallback", GetType(CustomPopupPlacementCallback), GetType(PopupKeyboard), New FrameworkPropertyMetadata(Nothing, New PropertyChangedCallback(AddressOf PopupKeyboard.OnCustomPopupPlacementCallbackChanged)))
<AttachedPropertyBrowsableForType(GetType(FrameworkElement))> _
Public Shared Function GetCustomPopupPlacementCallback(element As DependencyObject) As CustomPopupPlacementCallback
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
Return DirectCast(element.GetValue(CustomPopupPlacementCallbackProperty), CustomPopupPlacementCallback)
End Function
Public Shared Sub SetCustomPopupPlacementCallback(element As DependencyObject, value As CustomPopupPlacementCallback)
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
element.SetValue(CustomPopupPlacementCallbackProperty, value)
End Sub
Public Shared ReadOnly StateProperty As DependencyProperty = DependencyProperty.RegisterAttached("State", GetType(KeyboardState), GetType(PopupKeyboard), New FrameworkPropertyMetadata(KeyboardState.Normal, New PropertyChangedCallback(AddressOf PopupKeyboard.OnStateChanged)))
<AttachedPropertyBrowsableForType(GetType(FrameworkElement))> _
Public Shared Function GetState(element As DependencyObject) As KeyboardState
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
Return CType(element.GetValue(StateProperty), KeyboardState)
End Function
Public Shared Sub SetState(element As DependencyObject, value As KeyboardState)
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
element.SetValue(StateProperty, value)
End Sub
Public Shared ReadOnly HeightProperty As DependencyProperty = DependencyProperty.RegisterAttached("Height", GetType(Double), GetType(PopupKeyboard), New FrameworkPropertyMetadata(MinimumHeight, New PropertyChangedCallback(AddressOf PopupKeyboard.OnHeightChanged), New CoerceValueCallback(AddressOf PopupKeyboard.CoerceHeight)))
<AttachedPropertyBrowsableForType(GetType(FrameworkElement))> _
Public Shared Function GetHeight(element As DependencyObject) As Double
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
Return CDbl(element.GetValue(HeightProperty))
End Function
Public Shared Sub SetHeight(element As DependencyObject, value As Double)
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
element.SetValue(HeightProperty, value)
End Sub
Public Shared ReadOnly WidthProperty As DependencyProperty = DependencyProperty.RegisterAttached("Width", GetType(Double), GetType(PopupKeyboard), New FrameworkPropertyMetadata(MinimumWidth, New PropertyChangedCallback(AddressOf PopupKeyboard.OnWidthChanged), New CoerceValueCallback(AddressOf PopupKeyboard.CoerceWidth)))
<AttachedPropertyBrowsableForType(GetType(FrameworkElement))> _
Public Shared Function GetWidth(element As DependencyObject) As Double
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
Return CDbl(element.GetValue(WidthProperty))
End Function
Public Shared Sub SetWidth(element As DependencyObject, value As Double)
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
element.SetValue(WidthProperty, value)
End Sub
Public Shared ReadOnly IsEnabledProperty As DependencyProperty = DependencyProperty.RegisterAttached("IsEnabled", GetType(Boolean), GetType(PopupKeyboard), New FrameworkPropertyMetadata(False, New PropertyChangedCallback(AddressOf PopupKeyboard.OnIsEnabledChanged)))
<AttachedPropertyBrowsableForType(GetType(FrameworkElement))> _
Public Shared Function GetIsEnabled(element As DependencyObject) As Boolean
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
Return CBool(element.GetValue(IsEnabledProperty))
End Function
Public Shared Sub SetIsEnabled(element As DependencyObject, value As Boolean)
If element Is Nothing Then
Throw New ArgumentNullException("element")
End If
element.SetValue(IsEnabledProperty, value)
End Sub
#End Region
#Region "Private Methods"
Private Shared Sub OnPlacementChanged(element As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim frameworkElement As FrameworkElement = TryCast(element, FrameworkElement)
If (frameworkElement IsNot Nothing) AndAlso (PopupKeyboard._popupKeyboardUserControl IsNot Nothing) Then
_popupKeyboardUserControl.Placement = PopupKeyboard.GetPlacement(frameworkElement)
End If
End Sub
Private Shared Sub OnPlacementTargetChanged(element As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim frameworkElement As FrameworkElement = TryCast(element, FrameworkElement)
If (frameworkElement IsNot Nothing) AndAlso (PopupKeyboard._popupKeyboardUserControl IsNot Nothing) Then
_popupKeyboardUserControl.PlacementTarget = PopupKeyboard.GetPlacementTarget(frameworkElement)
End If
End Sub
Private Shared Sub OnPlacementRectangleChanged(element As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim frameworkElement As FrameworkElement = TryCast(element, FrameworkElement)
If (frameworkElement IsNot Nothing) AndAlso (PopupKeyboard._popupKeyboardUserControl IsNot Nothing) Then
_popupKeyboardUserControl.PlacementRectangle = PopupKeyboard.GetPlacementRectangle(frameworkElement)
End If
End Sub
Private Shared Sub OnHorizontalOffsetChanged(element As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim frameworkElement As FrameworkElement = TryCast(element, FrameworkElement)
If (frameworkElement IsNot Nothing) AndAlso (PopupKeyboard._popupKeyboardUserControl IsNot Nothing) Then
_popupKeyboardUserControl.HorizontalOffset = PopupKeyboard.GetHorizontalOffset(frameworkElement)
End If
End Sub
Private Shared Sub OnVerticalOffsetChanged(element As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim frameworkElement As FrameworkElement = TryCast(element, FrameworkElement)
If (frameworkElement IsNot Nothing) AndAlso (PopupKeyboard._popupKeyboardUserControl IsNot Nothing) Then
_popupKeyboardUserControl.VerticalOffset = PopupKeyboard.GetVerticalOffset(frameworkElement)
End If
End Sub
Private Shared Sub OnCustomPopupPlacementCallbackChanged(element As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim frameworkElement As FrameworkElement = TryCast(element, FrameworkElement)
If (frameworkElement IsNot Nothing) AndAlso (PopupKeyboard._popupKeyboardUserControl IsNot Nothing) Then
_popupKeyboardUserControl.CustomPopupPlacementCallback = PopupKeyboard.GetCustomPopupPlacementCallback(frameworkElement)
End If
End Sub
Private Shared Sub OnStateChanged(element As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim frameworkElement As FrameworkElement = TryCast(element, FrameworkElement)
If (frameworkElement IsNot Nothing) AndAlso (PopupKeyboard._popupKeyboardUserControl IsNot Nothing) Then
_popupKeyboardUserControl.State = PopupKeyboard.GetState(frameworkElement)
End If
End Sub
Private Shared Sub OnHeightChanged(element As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim frameworkElement As FrameworkElement = TryCast(element, FrameworkElement)
If (frameworkElement IsNot Nothing) AndAlso (PopupKeyboard._popupKeyboardUserControl IsNot Nothing) Then
_popupKeyboardUserControl.NormalHeight = PopupKeyboard.GetHeight(frameworkElement)
End If
End Sub
Private Shared Function CoerceHeight(d As DependencyObject, value As Object) As Object
If CDbl(value) < PopupKeyboard.MinimumHeight Then
Return PopupKeyboard.MinimumHeight
End If
Return value
End Function
Private Shared Sub OnWidthChanged(element As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim frameworkElement As FrameworkElement = TryCast(element, FrameworkElement)
If (frameworkElement IsNot Nothing) AndAlso (PopupKeyboard._popupKeyboardUserControl IsNot Nothing) Then
_popupKeyboardUserControl.NormalWidth = PopupKeyboard.GetWidth(frameworkElement)
End If
End Sub
Private Shared Function CoerceWidth(d As DependencyObject, value As Object) As Object
If CDbl(value) < PopupKeyboard.MinimumWidth Then
Return PopupKeyboard.MinimumWidth
End If
Return value
End Function
Private Shared Sub OnIsEnabledChanged(element As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim frameworkElement__1 As FrameworkElement = TryCast(element, FrameworkElement)
If frameworkElement__1 IsNot Nothing Then
If (CBool(e.NewValue) = True) AndAlso (CBool(e.OldValue) = False) Then
frameworkElement__1.[AddHandler](FrameworkElement.GotKeyboardFocusEvent, New KeyboardFocusChangedEventHandler(AddressOf frameworkElement_GotKeyboardFocus), True)
frameworkElement__1.[AddHandler](FrameworkElement.LostKeyboardFocusEvent, New KeyboardFocusChangedEventHandler(AddressOf frameworkElement_LostKeyboardFocus), True)
frameworkElement__1.[AddHandler](FrameworkElement.MouseDownEvent, New MouseButtonEventHandler(AddressOf frameworkElement_MouseDown), True)
frameworkElement__1.[AddHandler](FrameworkElement.SizeChangedEvent, New SizeChangedEventHandler(AddressOf frameworkElement_SizeChanged), True)
ElseIf (CBool(e.NewValue) = False) AndAlso (CBool(e.OldValue) = True) Then
frameworkElement__1.[RemoveHandler](FrameworkElement.GotKeyboardFocusEvent, New KeyboardFocusChangedEventHandler(AddressOf frameworkElement_GotKeyboardFocus))
frameworkElement__1.[RemoveHandler](FrameworkElement.LostKeyboardFocusEvent, New KeyboardFocusChangedEventHandler(AddressOf frameworkElement_LostKeyboardFocus))
frameworkElement__1.[RemoveHandler](FrameworkElement.MouseUpEvent, New MouseButtonEventHandler(AddressOf frameworkElement_MouseDown))
frameworkElement__1.[RemoveHandler](FrameworkElement.SizeChangedEvent, New SizeChangedEventHandler(AddressOf frameworkElement_SizeChanged))
End If
End If
Dim currentWindow As Window = Window.GetWindow(element)
If currentWindow IsNot Nothing Then
If (CBool(e.NewValue) = True) AndAlso (CBool(e.OldValue) = False) Then
AddHandler currentWindow.LocationChanged, AddressOf currentWindow_LocationChanged
ElseIf (CBool(e.NewValue) = False) AndAlso (CBool(e.OldValue) = True) Then
RemoveHandler currentWindow.LocationChanged, AddressOf currentWindow_LocationChanged
End If
End If
End Sub
Private Shared Sub frameworkElement_GotKeyboardFocus(sender As Object, e As System.Windows.Input.KeyboardFocusChangedEventArgs)
Dim frameworkElement As FrameworkElement = TryCast(sender, FrameworkElement)
If frameworkElement IsNot Nothing Then
If PopupKeyboard._popupKeyboardUserControl Is Nothing Then
_popupKeyboardUserControl = New PopupKeyboardUserControl()
_popupKeyboardUserControl.Placement = PopupKeyboard.GetPlacement(frameworkElement)
_popupKeyboardUserControl.PlacementTarget = PopupKeyboard.GetPlacementTarget(frameworkElement)
_popupKeyboardUserControl.PlacementRectangle = PopupKeyboard.GetPlacementRectangle(frameworkElement)
_popupKeyboardUserControl.HorizontalOffset = PopupKeyboard.GetHorizontalOffset(frameworkElement)
_popupKeyboardUserControl.VerticalOffset = PopupKeyboard.GetVerticalOffset(frameworkElement)
_popupKeyboardUserControl.StaysOpen = True
_popupKeyboardUserControl.CustomPopupPlacementCallback = PopupKeyboard.GetCustomPopupPlacementCallback(frameworkElement)
_popupKeyboardUserControl.State = PopupKeyboard.GetState(frameworkElement)
_popupKeyboardUserControl.NormalHeight = PopupKeyboard.GetHeight(frameworkElement)
_popupKeyboardUserControl.NormalWidth = PopupKeyboard.GetWidth(frameworkElement)
If PopupKeyboard.GetState(frameworkElement) = KeyboardState.Normal Then
PopupKeyboard._popupKeyboardUserControl.IsOpen = True
End If
End If
End If
End Sub
Private Shared Sub frameworkElement_LostKeyboardFocus(sender As Object, e As System.Windows.Input.KeyboardFocusChangedEventArgs)
Dim frameworkElement As FrameworkElement = TryCast(sender, FrameworkElement)
If frameworkElement IsNot Nothing Then
If PopupKeyboard._popupKeyboardUserControl IsNot Nothing Then
PopupKeyboard.SetState(frameworkElement, _popupKeyboardUserControl.State)
PopupKeyboard._popupKeyboardUserControl.IsOpen = False
PopupKeyboard._popupKeyboardUserControl = Nothing
End If
End If
End Sub
Private Shared Sub frameworkElement_MouseDown(sender As Object, e As MouseButtonEventArgs)
Dim frameworkElement As FrameworkElement = TryCast(sender, FrameworkElement)
If frameworkElement IsNot Nothing Then
If PopupKeyboard._popupKeyboardUserControl IsNot Nothing Then
If e.ClickCount = 2 Then
PopupKeyboard._popupKeyboardUserControl.State = (If(PopupKeyboard._popupKeyboardUserControl.State = KeyboardState.Hidden, KeyboardState.Normal, KeyboardState.Hidden))
End If
End If
End If
End Sub
Private Shared Sub frameworkElement_SizeChanged(sender As Object, e As SizeChangedEventArgs)
Dim frameworkElement As FrameworkElement = TryCast(sender, FrameworkElement)
If frameworkElement IsNot Nothing Then
If PopupKeyboard._popupKeyboardUserControl IsNot Nothing AndAlso PopupKeyboard._popupKeyboardUserControl.State = KeyboardState.Normal Then
PopupKeyboard._popupKeyboardUserControl.LocationChange()
End If
End If
End Sub
Private Shared Sub currentWindow_LocationChanged(sender As Object, e As EventArgs)
Dim frameworkElement As FrameworkElement = TryCast(sender, FrameworkElement)
If frameworkElement IsNot Nothing Then
If PopupKeyboard._popupKeyboardUserControl IsNot Nothing AndAlso PopupKeyboard._popupKeyboardUserControl.State = KeyboardState.Normal Then
PopupKeyboard._popupKeyboardUserControl.LocationChange()
End If
End If
End Sub
#End Region
End Class
Public Enum KeyboardState
Normal
Hidden
End Enum
End Namespace
|