Fragensteller
Navigieren im WPF Datagrid

Frage
-
Hallo liebe Kollegen,
ich verzweifle gerade am Datagrid. Ich habe schon unzählige Sachen ausprobiert für eine ganz einfache Sache, die ich einfach nicht hinbekomme:
Im Nachfolgenden Beispiel möchte ich, wenn die Form geladen ist, dass der Cursor in der Textbox "1" sitzt. Mit betätigen der Enter Taste, soll der Cursor dann "EUR", "5","kg","4","USD","2","Stück" springen, und dann wieder auf die "1".
2. Wenn der Cursor in der TextBox "EUR" ist, möchte ich, dass beim betätigen der F5 Taste der Cursor in die TextBox "USD" springt.
Der Focus soll also IMMER in einer TextBox und nicht DataGridCell, DataGrid oder sonst irgendein Übergeordnetes Element der TextBoxen sein.
Das ist nur ein Beispiel, mir geht es hier um das Prinzip und daher ist es mir wichtig, dass die Variante mit den Benutzersteuerelementen beibehalten bleibt.
Vielen Dank schon mal für eure Hilfe.
Hier der Code:
<UserControl x:Class="ucBetrag" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:View" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"> <Grid> <StackPanel> <TextBox Text="{Binding Betrag}"></TextBox> <TextBox Text="{Binding Waehrung}"></TextBox> </StackPanel> </Grid> </UserControl>
<UserControl x:Class="ucMenge" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:View" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"> <Grid> <StackPanel> <TextBox Text="{Binding Menge}"></TextBox> <TextBox Text="{Binding Einheit}"></TextBox> </StackPanel> </Grid> </UserControl>
<Window x:Class="Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:View" mc:Ignorable="d" Title="Window1" Height="300" Width="300"> <Grid> <DataGrid Name="dg" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" > <DataGrid.Columns> <DataGridTemplateColumn Header="Betrag"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <local:ucBetrag> </local:ucBetrag> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTemplateColumn Header="Menge"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <local:ucMenge> </local:ucMenge> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </Grid> </Window>
Imports System.Collections.ObjectModel Public Class Window1 Private Sub Window1_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded Dim o As New ObservableCollection(Of Datensatz) Dim d As Datensatz d = New Datensatz d.Menge = 5 d.Einheit = "kg" d.Betrag = 1 d.Waehrung = "EUR" o.Add(d) d = New Datensatz d.Menge = 2 d.Einheit = "Stück" d.Betrag = 4 d.Waehrung = "USD" o.Add(d) dg.ItemsSource = o End Sub End Class Public Class Datensatz Private mMenge As Integer Public Property Menge() As Integer Get Return mMenge End Get Set(ByVal value As Integer) mMenge = value End Set End Property Private mEinheit As String Public Property Einheit() As String Get Return mEinheit End Get Set(ByVal value As String) mEinheit = value End Set End Property Private mBetrag As Decimal Public Property Betrag() As Decimal Get Return mBetrag End Get Set(ByVal value As Decimal) mBetrag = value End Set End Property Private mWaehrung As String Public Property Waehrung() As String Get Return mWaehrung End Get Set(ByVal value As String) mWaehrung = value End Set End Property End Class
Alle Antworten
-
Hi,
wenn Du die Selektierung in einer Zeile des DataGrids als Einheit ohne Zellwechsel benötigst, dann solltest Du beide Nutzersteuerelemente in eine Zelle packen. Weiterhin ist unklar, was bei dem vom Anwender erwarteten Verhalten passieren soll, z.B. Tab-Taste.--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks -
Hallo ,
es freut mich ganz besonders, dass du dich der Sache annimmst. Da bin ich überzeugt, dass ich ans Ziel gelange.
Wie gesagt, es ist nur ein einfaches Beispiel, der Verwendungszweck ist wesentlich komplexer. Warum nicht beide Steuerelemente in einer Spalte? Wegen Sortierung!
Tab Taste soll wie die Return Taste funktionieren. Egal wie oft ich die Tab Taste drücke, der Cursor soll immer in einer von den 8 Textboxen landen.
Viele Grüße
Dirk Schelling