Frage

Ich frage mich, ob jemand weiß, warum der DatePicker Standardschlüssel an das Schlüssel -Down -Ereignis eines übergeordneten Steuerelements übergeben wird, aber nicht an die Rückgabetaste.

Hier ist der XAML, den ich geschrieben habe:

    <WrapPanel Name="_wpParameters" 
               Grid.Row="0" Grid.Column="0" 
               Orientation="Horizontal" 
               Grid.IsSharedSizeScope="True"
               Keyboard.KeyDown="_wpParameters_KeyDown" >
        <!-- this is where the dynamic parameter controls will be added -->
    </WrapPanel>

Hier ist der Code, den ich verwendet habe, um den Rückgabetaste zu überprüfen:

private void _wpParameters_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Return)
    {
        RaiseEvent(new RoutedEventArgs(LoadLiveResultsEvent, this));
    }
}

Ich benutzte Key Down für Unfall (soll Schlüssel verwenden), aber ich fand es interessant, dass die Standard -Numerik- und / Charaktere die Logik abfeuerten, aber nicht die Rückkehrschlüssel. Irgendwelche Idee, warum der Rückkehrschlüssel nicht als Schlüssel -Down -Schlüssel enthalten ist?

War es hilfreich?

Lösung

Das Schlüsseldown-Ereignis ist ein Texteingangsereignis auf niedrigerer Ebene, das sich bei bestimmten Steuerelementen möglicherweise nicht wie erwartet verhalten. Dies liegt daran, dass einige Steuerelemente eine Kontrollkomposition oder Klassenhandhabung haben, die eine höhere Version des Texteingangshandlings und verwandte Ereignisse bietet.

Wie aufgesehen Msdn... Meine Annahme ist, dass die Kontrolle das Ereignis verbraucht und den Text möglicherweise an die bindbare Quelle und andere Aufräumarbeiten eingreift und dann das Ereignis als behandelt markiert.

Andere Tipps

Außerdem musste ich meine Lösung erwähnen. Ich hatte eine übergeordnete Ansicht, die das Schlüsseldown -Ereignis von allen Kinderviewmodels verarbeitet. Ich habe ein Verhalten für spezielle Steuerelemente wie DatePicker, MaskedTextBox usw. deklariert, die das Tunneling -Ereignis von PreviewKeydown -Ereignissen erfassen und das Bubbling -Ereignis von Keydown erhöhen:

public class EnterPressedBehavior : Behavior<UIElement>
{
    public ICommand EnterPressedCommand { get; private set; }

    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.PreviewKeyDown += EnterPressed;
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();
        AssociatedObject.PreviewKeyDown -= EnterPressed;
    }

    private void EnterPressed(object sender, KeyEventArgs keyEventArgs)
    {
        if (Keyboard.PrimaryDevice != null && Keyboard.PrimaryDevice.ActiveSource != null)
        {
            var eventArgs = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, keyEventArgs.Key) { RoutedEvent = UIElement.KeyDownEvent };

            AssociatedObject.RaiseEvent(eventArgs);
        }
    }
}

Dieses bis zum Datumspunkt zugewiesene Verhalten:

<DatePicker x:Name="BirthDateDatePicker" Grid.Column="1"
                    Grid.Row="6" Margin="3" HorizontalAlignment="Stretch"                                              
                    IsEnabled="{Binding PersonFieldsEditDenied}"
                    Validation.ErrorTemplate="{StaticResource DefaultValidationTemplate}"
                    AutomationProperties.AutomationId="BirthDateDatePicker">
            <i:Interaction.Behaviors>
                <viewModels:EnterPressedBehavior />
            </i:Interaction.Behaviors>
</DatePicker>

Welches wird von der Elternansicht angehört:

<Window
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Title=""
       KeyDown="OnKeyDownHandler">

Code hinter:

private void OnKeyDownHandler(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
        {
            // your code
        }
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top