0

だから私はこのxamlのことが本当に苦手で、どこを見ようとしましたが、私にとって役立つものは何も見つかりませんでした.誰かがここで私を助けてくれることを願っています.

したがって、TextBox や ComboBox などのいくつかのコントロールがある TemplateColumns を持つデータグリッドがあります。ここで達成しようとしているのは、あるコントロールからタブを移動したときに、同じ行の次のコントロールにフォーカスしたいのですが、現在起こっているのは列がフォーカスされ、その後タブをもう一度押すとコントロールがフォーカスされることです、つまり、あるコントロールから別のコントロールにジャンプするには、タブを 2 回押す必要があります。私のデータグリッドは次のようになります。

               <DataGridTemplateColumn Header="Omschrijving" Width="150">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Grid>
                                <TextBox TabIndex="0" Name="txtOms" Text="{Binding txtOmschrijving}" Width="140" Height="24" />
                            </Grid>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
4

1 に答える 1

0

誰もヒントを与えたり助けたりすることができなかったので、インターネットを掘り下げて解決策を見つけました。うまくいけば、困っている人を助けるでしょう:

    Private Sub dgKasStaatRegels_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles dgKasStaatRegels.Loaded
    Try
        Dim CellFocusedChangedHandler As New RoutedEventHandler(AddressOf FocusChangedHandler)
        [AddHandler](DataGridCell.GotKeyboardFocusEvent, CellFocusedChangedHandler)
    Catch ex As Exception
        WriteErrorLog("ucKasStaat", "dgKasStaatRegels_Loaded", ex)
    End Try
End Sub
Private Sub FocusChangedHandler(sender As Object, args As RoutedEventArgs)
    If args.RoutedEvent.RoutingStrategy = RoutingStrategy.Bubble Then
        Dim DataGridCellObj As FrameworkElement = TryCast(args.OriginalSource, FrameworkElement)
        If Keyboard.IsKeyDown(Key.Tab) Then
            If DataGridCellObj IsNot Nothing Then
                Dim txtb As TextBox = TryCast(DataGridCellObj, TextBox)
                If txtb IsNot Nothing Then txtb.Focus()

                Dim cb As ComboBox = TryCast(DataGridCellObj, ComboBox)
                If cb IsNot Nothing Then
                    cb.Focus()
                    cb.IsDropDownOpen = True
                End If
            End If
        End If
    End If
End Sub
Public Shared Function FindParent(Of T As DependencyObject)(dependencyObject As DependencyObject) As T
    Dim parent = VisualTreeHelper.GetParent(dependencyObject)

    If parent Is Nothing Then
        Return Nothing
    End If

    Dim parentT = TryCast(parent, T)
    Return If(parentT, FindParent(Of T)(parent))
End Function

簡単な説明: データグリッドの読み込み時に CellFocusedChangedHandler ハンドラーを追加し、そのサブでその行内のオブジェクトがテキストボックス (私の場合) であるかどうかを追跡し、そのフォーカスを設定します!

それは私のために働いた!

于 2013-10-22T09:37:52.860 に答える