<Window x:Class="CostelloM_Data_Persistence_v1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ContactMyPeeps(IllegalVersion)" Height="350" Width="525">
<Window.Resources>
<RoutedCommand x:Key="Saveas"/>
</Window.Resources>
<Window.CommandBindings>
<CommandBinding Command="Saveas" Executed="Save_As"/>
</Window.CommandBindings>
<Window.InputBindings>
<KeyBinding Key="S"
Modifiers="Control + Shift"
Command="Saveas"/>
</Window.InputBindings>
<Grid>
<StackPanel Orientation="Vertical">
<Menu>
<MenuItem Header="File">
<MenuItem Command="Save" Header="Save"/>
<MenuItem Command="Saveas" Header="Save as" InputGestureText="Ctrl+Shift+S"/>
<MenuItem Command="Open" Header="Open"/>
</MenuItem>
</Menu>
<ItemsControl>
<ComboBox>
</ComboBox>
</ItemsControl>
</StackPanel>
</Grid>
</Window>
我的问题如下,上面的代码将无法编译。我尝试过保存,清理和重建我的视觉工作室项目,但仍然没有骰子。它说命令转换器无法从system.string转换。显然,我要么误解RoutedCommand而不能以这种方式用作自定义命令。有没有办法强制RoutedCommand创建新命令,或者使用不同的方式来使用自定义命令?
答案 0 :(得分:1)
您正在资源中定义命令,因此您需要告诉绑定系统它是否在资源中。您需要将XAML中的多个位置更改为此
Command="{StaticResource Saveas}"
但是,在ApplicationCommands
类中为您预定义了几个标准命令,如Open,Save和SaveAs。绑定系统将自动尝试绑定到这些,但外壳很重要。这样:
Command="SaveAs"
将绑定到ApplicationCommands
中定义的相应命令。然后,资源中定义的命令就变得不必要了。
答案 1 :(得分:0)
您在多行上都有拼写错误,这很可能会给您&#34; CommandConverter无法转换为System.String&#34; 错误,因为它没有认识到这个命令。
改变这个:
<CommandBinding Command="Saveas" Executed="Save_As"/>
对此:(大写&#34; A&#34;)
<CommandBinding Command="SaveAs" Executed="Save_As"/>