键绑定 WPF 与 Caliburn Micro
Key Bindings WPF with Caliburn Micro
我有一个 window 和一个 TabControl
。我有一个 TabItem
我设置的地方:
Visibility="{Binding IsVisible}
我也已将此添加到 window 的 XAML:
<Window.InputBindings>
<KeyBinding Modifiers="Ctrl"
Key="H"
Command="{Binding ToggleHiddenTab}" />
</Window.InputBindings>
我将此方法添加到 ViewModel。
public void ToggleHiddenTab()
{
if (IsVisible == Visibility.Visible)
{
IsVisible = Visibility.Hidden;
NotifyOfPropertyChange(() => IsVisible);
}
else
{
IsVisible = Visibility.Visible;
NotifyOfPropertyChange(() => IsVisible);
}
}
完整 属性:
private Visibility _isVisible;
public Visibility IsVisible
{
get { return _isVisible; }
set {
_isVisible = value;
NotifyOfPropertyChange(() => IsVisible);
}
}
当我按下 CTRL+h 时没有任何反应。为了测试功能,我添加了一个测试按钮:
<Button x:Name="ToggleHiddenTab" Content="Test Visible"
Grid.Column="0" Margin="20,8,20,8">
<Button.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="CornerRadius" Value="5"/>
</Style>
</Button.Resources>
</Button>
当我单击该按钮时,隐藏的选项卡会更改其可见性。为什么 ctrl+h 键不被接受?
--------------------编辑------------------------ ----------------------
根据下面的答案,我添加了:
cal:Message.Attach="[Gesture Ctrl+H] = [ToggleHiddenTab]"
然后编辑器通过 "cal:" 的 "namespace undefined" 错误,快速 google 搜索建议添加到 window 标签:
xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform"
这仍然没有按照建议工作。
ToggleHiddenTab
不是命令,是方法。
但是你应该可以使用附加的 cal:Message.Attach
属性 来连接键绑定:
<Window ... cal:Message.Attach="[Gesture Ctrl+H] = [ToggleHiddenTab]">
所以我终于让它工作了。我忘记了 Caliburn.Micro 的 GitHub 页面中的所有示例。
就是这个:
https://github.com/Caliburn-Micro/Caliburn.Micro/tree/master/samples/scenarios/Scenario.KeyBinding
我不得不更改 AppBootstrapper Configure(),并向项目添加 4 个 class。
现在一切正常!
由于某些原因,cal:Message.Attach="[Gesture Ctrl+H]...
的方法对我不起作用。但是我找到了 KeyTrigger
.
的解决方案
在您的情况下,它将类似于:
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:cm="http://caliburnmicro.com"
...
<Grid >
<i:Interaction.Triggers>
<i:KeyTrigger Key="H" Modifiers="Control">
<cm:ActionMessage MethodName="ToggleHiddenTab" />
</i:KeyTrigger>
</i:Interaction.Triggers>
...
</Grid>
我有一个 window 和一个 TabControl
。我有一个 TabItem
我设置的地方:
Visibility="{Binding IsVisible}
我也已将此添加到 window 的 XAML:
<Window.InputBindings>
<KeyBinding Modifiers="Ctrl"
Key="H"
Command="{Binding ToggleHiddenTab}" />
</Window.InputBindings>
我将此方法添加到 ViewModel。
public void ToggleHiddenTab()
{
if (IsVisible == Visibility.Visible)
{
IsVisible = Visibility.Hidden;
NotifyOfPropertyChange(() => IsVisible);
}
else
{
IsVisible = Visibility.Visible;
NotifyOfPropertyChange(() => IsVisible);
}
}
完整 属性:
private Visibility _isVisible;
public Visibility IsVisible
{
get { return _isVisible; }
set {
_isVisible = value;
NotifyOfPropertyChange(() => IsVisible);
}
}
当我按下 CTRL+h 时没有任何反应。为了测试功能,我添加了一个测试按钮:
<Button x:Name="ToggleHiddenTab" Content="Test Visible"
Grid.Column="0" Margin="20,8,20,8">
<Button.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="CornerRadius" Value="5"/>
</Style>
</Button.Resources>
</Button>
当我单击该按钮时,隐藏的选项卡会更改其可见性。为什么 ctrl+h 键不被接受?
--------------------编辑------------------------ ---------------------- 根据下面的答案,我添加了:
cal:Message.Attach="[Gesture Ctrl+H] = [ToggleHiddenTab]"
然后编辑器通过 "cal:" 的 "namespace undefined" 错误,快速 google 搜索建议添加到 window 标签:
xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform"
这仍然没有按照建议工作。
ToggleHiddenTab
不是命令,是方法。
但是你应该可以使用附加的 cal:Message.Attach
属性 来连接键绑定:
<Window ... cal:Message.Attach="[Gesture Ctrl+H] = [ToggleHiddenTab]">
所以我终于让它工作了。我忘记了 Caliburn.Micro 的 GitHub 页面中的所有示例。
就是这个: https://github.com/Caliburn-Micro/Caliburn.Micro/tree/master/samples/scenarios/Scenario.KeyBinding
我不得不更改 AppBootstrapper Configure(),并向项目添加 4 个 class。
现在一切正常!
由于某些原因,cal:Message.Attach="[Gesture Ctrl+H]...
的方法对我不起作用。但是我找到了 KeyTrigger
.
在您的情况下,它将类似于:
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:cm="http://caliburnmicro.com"
...
<Grid >
<i:Interaction.Triggers>
<i:KeyTrigger Key="H" Modifiers="Control">
<cm:ActionMessage MethodName="ToggleHiddenTab" />
</i:KeyTrigger>
</i:Interaction.Triggers>
...
</Grid>