Hi,
I have to display a pop-up custom keyboard when user touches on a datagrid cell. It works fine when I click on it using mouse but when i use Touch, first touch is neglected. I checked at touch preview event on the target window it is triggered but it does not raise btn1.Click or similar touch events. On a second touch everything starts to work.
This same window when poped-up from a user control works fine without any issues. Touch is accepted on first touch.
Window is displayed as ShowDialog from a 'PreviewMouseLeftButtonDown' event handler in 'DataGridCell'. It almost looks like some bug by WPF. Please look at code below and let me know if you find anything. I already tried window.focus and window.activate and none helped.
I have the following code for event handler in XAML.
<DataGridTextColumn x:Name="SPCol" Binding="{Binding Path=LpSPs,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Width="*" IsReadOnly="False" ElementStyle="{StaticResource HollCenterAlignStyle}"><DataGridTextColumn.CellStyle><Style TargetType="DataGridCell"><EventSetter Event="PreviewMouseLeftButtonDown" Handler="EnterSP"/></Style></DataGridTextColumn.CellStyle></DataGridTextColumn>Here is the event handler
Private Sub EnterSP(sender As Object, e As MouseButtonEventArgs)
Try
Dim row As DataGridRow
Dim dep As DependencyObject = CType(e.OriginalSource, DependencyObject)
While dep IsNot Nothing And Not TypeOf dep Is DataGridCell And Not TypeOf dep Is Primitives.DataGridColumnHeader
dep = VisualTreeHelper.GetParent(dep)
End While
Dim cell As DataGridCell = sender
If (cell IsNot Nothing And Not cell.IsEditing) Then
' If (Not cell.IsFocused) Then
cell.Background = FindResource("mBlue")
cell.BorderBrush = FindResource("mBlue")
cell.Content.Foreground = FindResource("mWhite")
'End If
Dim col As DataGridBoundColumn = cell.Column
' find the property that this column is bound to
Dim binding As Binding = col.Binding
Dim boundPropertyName As String = binding.Path.Path
row = Nothing
If TypeOf dep Is DataGridCell Then
Dim cell1 As DataGridCell = DirectCast(dep, DataGridCell)
' navigate further up the tree
While dep IsNot Nothing And Not TypeOf dep Is DataGridRow
dep = VisualTreeHelper.GetParent(dep)
End While
row = DirectCast(dep, DataGridRow)
End If
cell.IsEditing = False
'get row index
Dim dataGrid As DataGrid = DirectCast(ItemsControl.ItemsControlFromItemContainer(row), DataGrid)
Dim index As Integer = dataGrid.ItemContainerGenerator.IndexFromContainer(row)
Dim data As Object = row.Item
Dim LpNum = CType(data, LoopParameters).LpId
If (SingleView = True) Then
If (BF315Unit.Loops(LpNum).LoopType <> clsBF315Loop.LpType.LT_NONE) Then
Dim ne = New WinNum(sender)
ne.SetExistingValue("Setpoint", BF315Unit.Loops(LpNum).SetPoint)
ne.SetLimits(CDbl(BF315Unit.Loops(LpNum).SPLowLimit), CDbl(BF315Unit.Loops(LpNum).SPHighLimit))
ne.Topmost = True
If (ne.ShowDialog()) Then
Dim val As Single = ne.ReturnValue
BF315Unit.ChangeSetpoint(LpNum, val)
End If
End If
End If
cell.Background = FindResource("mWhite")
cell.BorderBrush = FindResource("mWhite")
cell.Content.Foreground = FindResource("mAnthrazit")
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub