WPF-MVVM-Tastenbelegung nicht erkannt auf Anhieb und nicht immer arbeiten
Aus welchem Grund auch immer, sich die Tastaturbelegung für mein UserControl nicht zu arbeiten, sobald meine WPF-Anwendung geladen wird. Sie tun die Arbeit, nachdem ich eine Taste drücken, auf die form aber nicht, wenn ich den Fokus auf das Formular durch klicken oder die alt-Taste berühren oder bewegen oder etwas ähnliches. Und wenn Sie nicht arbeiten, meine enter-Taste drucken, wird eine zufällige Zahl. (manchmal 5, manchmal 7 usw...).
<UserControl x:Class="WpfCalculator.View.CalculatorView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300"
>
<UserControl.InputBindings>
<KeyBinding Key="DELETE" Command="{Binding Path=IBackspaceOnInput}" />
<KeyBinding Key="BACKSPACE" Command="{Binding Path=IBackspaceOnInput}" />
<KeyBinding Key="NUMPAD0" Command="{Binding Path=IAppendToUserInput}" CommandParameter="0" />
<KeyBinding Key="NUMPAD1" Command="{Binding Path=IAppendToUserInput}" CommandParameter="1" />
<KeyBinding Key="NUMPAD2" Command="{Binding Path=IAppendToUserInput}" CommandParameter="2" />
<KeyBinding Key="NUMPAD3" Command="{Binding Path=IAppendToUserInput}" CommandParameter="3" />
<KeyBinding Key="NUMPAD4" Command="{Binding Path=IAppendToUserInput}" CommandParameter="4" />
<KeyBinding Key="NUMPAD5" Command="{Binding Path=IAppendToUserInput}" CommandParameter="5" />
<KeyBinding Key="NUMPAD6" Command="{Binding Path=IAppendToUserInput}" CommandParameter="6" />
<KeyBinding Key="NUMPAD7" Command="{Binding Path=IAppendToUserInput}" CommandParameter="7" />
<KeyBinding Key="NUMPAD8" Command="{Binding Path=IAppendToUserInput}" CommandParameter="8" />
<KeyBinding Key="NUMPAD9" Command="{Binding Path=IAppendToUserInput}" CommandParameter="9" />
<KeyBinding Key="D0" Command="{Binding Path=IAppendToUserInput}" CommandParameter="0" />
<KeyBinding Key="D1" Command="{Binding Path=IAppendToUserInput}" CommandParameter="1" />
<KeyBinding Key="D2" Command="{Binding Path=IAppendToUserInput}" CommandParameter="2" />
<KeyBinding Key="D3" Command="{Binding Path=IAppendToUserInput}" CommandParameter="3" />
<KeyBinding Key="D4" Command="{Binding Path=IAppendToUserInput}" CommandParameter="4" />
<KeyBinding Key="D5" Command="{Binding Path=IAppendToUserInput}" CommandParameter="5" />
<KeyBinding Key="D6" Command="{Binding Path=IAppendToUserInput}" CommandParameter="6" />
<KeyBinding Key="D7" Command="{Binding Path=IAppendToUserInput}" CommandParameter="7" />
<KeyBinding Key="D8" Command="{Binding Path=IAppendToUserInput}" CommandParameter="8" />
<KeyBinding Key="D9" Command="{Binding Path=IAppendToUserInput}" CommandParameter="9" />
<KeyBinding Key="ADD" Command="{Binding Path=IAppendToUserInput}" CommandParameter="+" />
<KeyBinding Key="SUBTRACT" Command="{Binding Path=IAppendToUserInput}" CommandParameter="-" />
<KeyBinding Key="MULTIPLY" Command="{Binding Path=IAppendToUserInput}" CommandParameter="*" />
<KeyBinding Key="DIVIDE" Command="{Binding Path=IAppendToUserInput}" CommandParameter="/" />
<KeyBinding Key="Return" Command="{Binding Path=ICalculateExpression}" CommandParameter="" />
<KeyBinding Key="Enter" Command="{Binding Path=ICalculateExpression}" CommandParameter="" />
<KeyBinding Key="Escape" Command="{Binding Path=IClearInput}" CommandParameter="" />
<KeyBinding Gesture="CTRL+M" Command="{Binding Path=IRememberExpression}" CommandParameter="" />
<KeyBinding Gesture="CTRL+R" Command="{Binding Path=IRecallExpression}" CommandParameter="" />
<KeyBinding Gesture="CTRL+X" Command="{Binding Path=IForgetExpression}" CommandParameter="" />
<KeyBinding Key="Left" Command="{Binding Path=IMMoveCursor}" CommandParameter="1" />
<KeyBinding Key="Right" Command="{Binding Path=IMMoveCursor}" CommandParameter="-1" />
</UserControl.InputBindings>
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="305" Width="489">
<TextBox Name="input" HorizontalAlignment="Right" IsReadOnly="True" Margin="0,12,200,271" Text="{Binding Path=UserInput}" Width="275" />
<Button Content="CE" Margin="143,0,323,147" Command="{Binding Path=IBackspaceOnInput}" CommandParameter="" Height="23" VerticalAlignment="Bottom" />
<Button Content="1" Height="23" HorizontalAlignment="Right" Margin="0,106,294,176" Width="23" Command="{Binding Path=IAppendToUserInput}" CommandParameter="1" />
<Button Content="2" Height="23" HorizontalAlignment="Right" Margin="0,106,265,176" Width="23" Command="{Binding Path=IAppendToUserInput}" CommandParameter="2" />
<Button Content="3" Height="23" HorizontalAlignment="Right" Margin="0,106,236,176" Width="23" Command="{Binding Path=IAppendToUserInput}" CommandParameter="3" />
<Button Content="4" Height="23" HorizontalAlignment="Right" Margin="0,77,294,205" Width="23" Command="{Binding Path=IAppendToUserInput}" CommandParameter="4" />
<Button Content="5" Height="23" HorizontalAlignment="Right" Margin="0,77,236,205" Width="23" Command="{Binding Path=IAppendToUserInput}" CommandParameter="5" />
<Button Content="6" Height="23" HorizontalAlignment="Right" Margin="0,77,265,205" Width="23" Command="{Binding Path=IAppendToUserInput}" CommandParameter="6" />
<Button Content="7" Height="23" HorizontalAlignment="Right" Margin="0,48,294,234" Width="23" Command="{Binding Path=IAppendToUserInput}" CommandParameter="7" />
<Button Content="8" Height="23" HorizontalAlignment="Right" Margin="0,48,265,234" Width="23" Command="{Binding Path=IAppendToUserInput}" CommandParameter="8" />
<Button Content="9" Height="23" HorizontalAlignment="Right" Margin="0,48,236,234" Width="23" Command="{Binding Path=IAppendToUserInput}" CommandParameter="9" />
<Button Content="0" Height="23" HorizontalAlignment="Left" Margin="201,135,0,147" Width="23" Command="{Binding Path=IAppendToUserInput}" CommandParameter="0" />
<Button Content="+" Height="23" HorizontalAlignment="Right" Margin="0,48,201,234" Width="23" Command="{Binding Path=IAppendToUserInput}" CommandParameter="+" />
<Button Content="-" Height="23" HorizontalAlignment="Right" Margin="0,77,201,205" Width="23" Command="{Binding Path=IAppendToUserInput}" CommandParameter="-" />
<Button Content="*" Height="23" HorizontalAlignment="Right" Margin="0,106,201,176" Width="23" Command="{Binding Path=IAppendToUserInput}" CommandParameter="*" />
<Button Content="/" Height="23" HorizontalAlignment="Right" Margin="0,135,201,147" Width="23" Command="{Binding Path=IAppendToUserInput}" CommandParameter="/" />
<Button Content="." Height="23" HorizontalAlignment="Right" Margin="0,135,236,147" Width="23" Command="{Binding Path=IAppendToUserInput}" CommandParameter="9" />
<Button Content="C" HorizontalAlignment="Right" Margin="0,164,323,118" Width="23" Command="{Binding Path=IClearInput}" CommandParameter="" />
<Button Content="MC" Height="23" HorizontalAlignment="Right" Margin="0,0,323,234" VerticalAlignment="Bottom" Width="23" Command="{Binding Path=IForgetExpression}" CommandParameter=""/>
<Button Content="M+" Height="23" HorizontalAlignment="Right" Margin="0,0,323,176" VerticalAlignment="Bottom" Width="23" Command="{Binding Path=IRememberExpression}" CommandParameter=""/>
<Button Content="MR" Height="23" HorizontalAlignment="Right" Margin="0,0,323,205" VerticalAlignment="Bottom" Width="23" Command="{Binding Path=IRecallExpression}" CommandParameter=""/>
<Expander ExpandDirection="Left" Header="History" Height="91" HorizontalAlignment="Right" Margin="0,193,200,0" VerticalAlignment="Top" Width="275">
<ListView ItemsSource="{Binding Path=History}" >
<ListView.View>
<GridView >
<GridViewColumn Header="Start" DisplayMemberBinding="{Binding Started}"/>
<GridViewColumn Header="End" DisplayMemberBinding="{Binding Completed}"/>
<GridViewColumn Header="Expression" DisplayMemberBinding="{Binding Calculation}"/>
<GridViewColumn Header="Solution" DisplayMemberBinding="{Binding Result}"/>
</GridView>
</ListView.View>
</ListView>
</Expander>
<Button Command="{Binding Path=ICalculateExpression}" CommandParameter="" IsEnabled="{Binding Path=IsEqualsBtnEnabled}" Content="=" Height="23" Margin="172,0,236,118" VerticalAlignment="Bottom" />
</Grid></UserControl>
Ich wirklich noch nicht in jemand anderes mit diesem problem, also ich bin nicht wirklich sicher, was zu geben, mehr als das. Lassen Sie mich wissen, ob es irgendwelche anderen Infos?
InformationsquelleAutor Terrance | 2010-04-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie sichergestellt, dass die Kontrolle tatsächlich den Fokus hat, wenn es lädt durch die Verwendung Mole? Es könnte sein, dass was auch immer Ihre übergeordnete Steuerung hält den Fokus, bis deine Tasten manuell ausgewählt werden. Als für Sie die Enter-Tasten, es klingt, als ob Sie wahrscheinlich in der Auswahl der zuletzt angeklickten button da wäre es noch konzentrieren, anstatt feuern Ihre Befehle.
Müssen Sie vielleicht Blick auf Ihre Befehle, da ich nicht sicher bin, ob die Deklarationen korrekt eingerichtet sind. Für
KeyBinding
s, Ihrem Befehl referenziert werden soll in XAML alsCommandReference
wie dieser Artikel beschreibt.Ihre Antwort hat helfen soweit-Taste, klicken Sie auf Verhalten, aber ich hatte gerade die Verwendung FocusManager.FocusedElement="{Binding ElementName=Eingabe}", um den Fokus von dem Textfeld. Aber die Befehls-Referenz gemacht, keine änderung an der app obwohl ich werde auf jeden Fall halten Sie im Verstand für das Anbringen von nicht-Abhängigkeit Eigenschaften, wenn ich mich in einer Zwickmühle in die Zukunft. Keine dummen Bindung Wortspiel beabsichtigt. lol
Ein Beispiel für die ClickMode: ich habe erwähnt, entweder früher <Button Content="1" Height="23" HorizontalAlignment="Right" Margin="0,106,294,176" Width="23" Command="{Binding Path=IAppendToUserInput}" CommandParameter="1" ClickMode="Press" />
Gut zu wissen, dass der Befehl Referenz nicht einen Unterschied machen, aber froh, das half, unabhängig. Ich hatte nicht laufen über diese Besondere Szenario vor, also werde ich stellen Sie sicher, notieren Sie diese nach unten, so ich haben es auch in der Zukunft.
InformationsquelleAutor Jeff Wain
Ich lief in das gleiche Problem. Ich folgte bis auf die Fokus-Problem. Ich fand, dass, wenn ich meinen Fokus auf eine Schaltfläche in meinem Formular, die Befehle zu arbeiten begonnen. Wenn mein Fokus-Element gelöscht wird und nicht umgeleitet werden (wie das löschen des letzten Elements aus einer listbox), dann wird keiner meiner Befehle funktionieren.
Ich manuell zurücksetzen, meine Tastatur den Fokus auf ein Standard-Element in den Fällen, verließen mein Fokus ina seltsamen Zustand verursacht meine Befehle zu brechen. In meinem Fall war das die Seite geladen Veranstaltung und der Befehl löschen (wenn es keine Elemente mehr in der Liste meiner box).
InformationsquelleAutor Cyrus Downey