Entwickler-Ecke

WPF / Silverlight - KeyBinding in Kindelement ignorieren


C# - Mi 17.08.16 11:04
Titel: KeyBinding in Kindelement ignorieren
Hey @ll,

ich habe eine WPF Page in der Ich einige KeyBindings definiere (direkt in den Ressourcen der Page)

XML-Daten
1:
2:
3:
4:
5:
    <KeyBinding Key="D1" Command="{StaticResource Commands.SelectDragTool}"/>
    <KeyBinding Key="D2" Command="{StaticResource Commands.SelectPenTool}"/>
    <KeyBinding Key="D3" Command="{StaticResource Commands.SelectRegionTool}"/>
    <KeyBinding Key="D4" Command="{StaticResource Commands.SelectRectTool}"/>
    <KeyBinding Key="D5" Command="{StaticResource Commands.SelectFillTool}"/>


Wie ihr sehen könnt, habe ich die Keys 1, 2, 3, 4 und 5 gebunden. Mein Problem nun: manchmal bekommt die Page eine TextBox als verschachteltes Kindelement. Wenn ich dann den Fokus in der TextBox habe und ich einen der gebundenen Keys verwende, wird natürlich auch das Command ausgeführt, was ich aber verhindern muss. Ich dachte wenn ich in dem UserControl, welches die TextBox enthält und logischerweise auch ein Kind der Page ist, die KeyBindings auf NotACommand binde, ist mein Problem gelöst:

XML-Daten
1:
2:
3:
4:
5:
            <KeyBinding Key="D1" Command="NotACommand" />
            <KeyBinding Key="D2" Command="NotACommand" />
            <KeyBinding Key="D3" Command="NotACommand" />
            <KeyBinding Key="D4" Command="NotACommand" />
            <KeyBinding Key="D5" Command="NotACommand" />

Aber Pustekuchen...

Weiß jemand wie ich die Commands in einem bestimmten Kindelement unterdrücken kann (bzw. eigentlich nur die KeyBindings dazu)?


Delete - Mi 17.08.16 21:15

- Nachträglich durch die Entwickler-Ecke gelöscht -


C# - Sa 20.08.16 16:05

Hey,

Naja das hilft mir nicht viel. Ich weiß auch dass es CanExecute gibt aber erstens hab ich ein RoutedCommand statt einem selbst implementierten Command und zweitens will ich dafür kein C# code schreiben müssen.

Ich hab mal irgendwo gelesen, dass KeyBindings einfach mit dem NotACommand Command überschrieben werden können, wenn sie außer Kraft gesetzt werden sollen (z.B. dass undo Command bei TextBoxen), aber hier funktioniert dass aus irgendwelchen Gründen nicht...