Я разработал повторно используемый пользовательский контроль. Он содержит UserControl.InputBindings. Это довольно просто, поскольку в нем есть только ярлык и кнопка (и новые свойства и т.д.).
Когда я использую элемент управления в своем окне, он работает хорошо. Но привязка ключа работает только при фокусировке. Когда один элемент управления имеет привязку к alt + f8, этот ярлык работает только тогда, когда он сфокусирован. Когда фокусируется другой, связанный с собственным привязкой, он работает, но не более + f8. Когда ни один из элементов управления не имеет фокуса, ничего не работает.
Как я могу добиться того, что мой usercontrol определяет привязки оконных окон?
Особенно после шаблона проектирования MVVM (используется Caliburn.Micro), но любая помощь оценивается.
XAML пользовательского элемента управления:
<UserControl x:Class="MyApp.UI.Controls.FunctionButton"
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:MyApp.UI.Controls"
xmlns:cm="http://www.caliburnproject.org"
x:Name="Root"
Focusable="True"
mc:Ignorable="d"
d:DesignHeight="60" d:DesignWidth="120">
<UserControl.Resources>
...
</UserControl.Resources>
<UserControl.InputBindings>
<KeyBinding Key="{Binding ElementName=Root, Path=FunctionKey}" Modifiers="{Binding ElementName=Root, Path=KeyModifiers}" Command="{Binding ElementName=Root, Path=ExecuteCommand}" />
</UserControl.InputBindings>
<DockPanel LastChildFill="True">
<TextBlock DockPanel.Dock="Top" Text="{Binding ElementName=Root, Path=HotkeyText}" />
<Button DockPanel.Dock="Bottom" Content="{Binding ElementName=Root, Path=Caption}" cm:Message.Attach="[Event Click] = [Action ExecuteButtonCommand($executionContext)]" cm:Action.TargetWithoutContext="{Binding ElementName=Root}" />
</DockPanel>
</UserControl>
Пример использования:
<Grid>
<c:FunctionButton Width="75" Height="75" Margin="10,10,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" FunctionKey="F1" ShiftModifier="True" cm:Message.Attach="[Event Execute] = [Action Button1Execute]" />
<c:FunctionButton Width="75" Height="75" Margin="10,90,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" FunctionKey="F2" ShiftModifier="True" cm:Message.Attach="[Event Execute] = [Action Button2Execute]" />
</Grid>
Как сказано, каждая кнопка работает (Execute увольняется) при щелчке мыши, и когда она сфокусирована, я могу использовать пробел для активации кнопки, а привязка ввода сфокусированной кнопки работает, но никогда не сфокусированная.