メニューショートカットが機能していません。メニューキーのバインディングが機能しない
私はこの問題をちょっと読んだので、回答hereによれば、それはクリックの代わりにコマンドを使う必要があることを意味します。ここで
メニュー構造である:
<MenuItem x:Uid="MenuItem_10" Header="Zoom In" InputGestureText="CTRL +" Click="menuViewZoomInOutScaleFactor" Tag="25">
<MenuItem.InputBindings>
<KeyBinding x:Uid="KeyBinding_7" Key="OemPlus" Modifiers="Ctrl" />
</MenuItem.InputBindings>
</MenuItem>
<MenuItem x:Uid="MenuItem_11" Header="Zoom Out" InputGestureText="CTRL -" Click="menuViewZoomInOutScaleFactor" Tag="-25">
<MenuItem.InputBindings>
<KeyBinding x:Uid="KeyBinding_8" Key="OemMinus" Modifiers="Ctrl"/>
</MenuItem.InputBindings>
</MenuItem>
<Separator x:Uid="Separator_7"/>
<MenuItem x:Uid="MenuItem_12" Header="400%" IsCheckable="True" IsChecked="{Binding Source={x:Static Properties:Settings.Default}, Path=ZoomFactor, Converter={ValueConverters:IsIntegerEqual To=400}, Mode=OneWay}" Tag="400" Click="menuViewZoomScaleFactor"/>
<MenuItem x:Uid="MenuItem_13" Header="300%" IsCheckable="True" IsChecked="{Binding Source={x:Static Properties:Settings.Default}, Path=ZoomFactor, Converter={ValueConverters:IsIntegerEqual To=300}, Mode=OneWay}" Tag="300" Click="menuViewZoomScaleFactor"/>
<MenuItem x:Uid="MenuItem_14" Header="250%" IsCheckable="True" IsChecked="{Binding Source={x:Static Properties:Settings.Default}, Path=ZoomFactor, Converter={ValueConverters:IsIntegerEqual To=250}, Mode=OneWay}" Tag="250" Click="menuViewZoomScaleFactor"/>
<MenuItem x:Uid="MenuItem_15" Header="200%" IsCheckable="True" IsChecked="{Binding Source={x:Static Properties:Settings.Default}, Path=ZoomFactor, Converter={ValueConverters:IsIntegerEqual To=200}, Mode=OneWay}" Tag="200" Click="menuViewZoomScaleFactor"/>
<MenuItem x:Uid="MenuItem_16" Header="175%" IsCheckable="True" IsChecked="{Binding Source={x:Static Properties:Settings.Default}, Path=ZoomFactor, Converter={ValueConverters:IsIntegerEqual To=175}, Mode=OneWay}" Tag="175" Click="menuViewZoomScaleFactor"/>
<MenuItem x:Uid="MenuItem_17" Header="150%" IsCheckable="True" IsChecked="{Binding Source={x:Static Properties:Settings.Default}, Path=ZoomFactor, Converter={ValueConverters:IsIntegerEqual To=150}, Mode=OneWay}" Tag="150" Click="menuViewZoomScaleFactor"/>
<MenuItem x:Uid="MenuItem_18" Header="125%" IsCheckable="True" IsChecked="{Binding Source={x:Static Properties:Settings.Default}, Path=ZoomFactor, Converter={ValueConverters:IsIntegerEqual To=125}, Mode=OneWay}" Tag="125" Click="menuViewZoomScaleFactor"/>
<MenuItem x:Uid="MenuItem_19" Header="100%" IsCheckable="True" InputGestureText="CTRL + 0" IsChecked="{Binding Source={x:Static Properties:Settings.Default}, Path=ZoomFactor, Converter={ValueConverters:IsIntegerEqual To=100}, Mode=OneWay}" Tag="100" Click="menuViewZoomScaleFactor">
<MenuItem.InputBindings>
<KeyBinding x:Uid="KeyBinding_9" Key="D0" Modifiers="Ctrl"/>
</MenuItem.InputBindings>
</MenuItem>
<MenuItem x:Uid="MenuItem_20" Header="75%" IsCheckable="True" IsChecked="{Binding Source={x:Static Properties:Settings.Default}, Path=ZoomFactor, Converter={ValueConverters:IsIntegerEqual To=75}, Mode=OneWay}" Tag="75" Click="menuViewZoomScaleFactor"/>
<MenuItem x:Uid="MenuItem_21" Header="50%" IsCheckable="True" IsChecked="{Binding Source={x:Static Properties:Settings.Default}, Path=ZoomFactor, Converter={ValueConverters:IsIntegerEqual To=50}, Mode=OneWay}" Tag="50" Click="menuViewZoomScaleFactor"/>
<Separator x:Uid="Separator_8"/>
<MenuItem x:Uid="MenuItem_22" Header="Custom..."/>
あなたが見ることができるように、メニュー項目の3を関連付けることがshoudl:
- はCtrl + 0
- はCtrl +
- Ctrlキー -
私はfiできませんでしたKeysリストの特定の文字を確認し、D0
,OemPlus
およびOemMinus
に解決しました。どちらにせよ、私のキーバインドは実際に処理されていません。どうして?
クリックを使ってコマンドに変換する方法がわかりません。これまでのところ、私のコマンドはすべてビューモデルに縛られていました。しかし、この例では、コードの背後に関連するコマンドが必要です。ここで
は私の現在のクリックハンドラです:
private void menuViewZoomScaleFactor(object sender, RoutedEventArgs e)
{
SetZoomFactor(Int32.Parse((String)((MenuItem)sender).Tag));
}
private void menuViewZoomInOutScaleFactor(object sender, RoutedEventArgs e)
{
int iStep = Int32.Parse((String)((MenuItem)sender).Tag);
if ((iStep == 25 && Settings.Default.ZoomFactor <= 375) ||
(iStep == -25 && Settings.Default.ZoomFactor >= 75))
{
SetZoomFactor(Settings.Default.ZoomFactor + iStep);
}
}
private void SetZoomFactor(int iZoomFactor)
{
Settings.Default.ZoomFactor = iZoomFactor;
IServiceProvider serviceProvider = myWorkbookView.Document as IServiceProvider;
Guid SID_SWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
Guid serviceGuid = SID_SWebBrowserApp;
Guid iid = typeof(SHDocVw.IWebBrowser2).GUID;
SHDocVw.IWebBrowser2 WebBrowser = (SHDocVw.IWebBrowser2)serviceProvider.QueryService(ref serviceGuid, ref iid);
WebBrowser.ExecWB(SHDocVw.OLECMDID.OLECMDID_OPTICAL_ZOOM, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, Settings.Default.ZoomFactor);
}
だから私は私のメニューキーバインディングが機能取得する必要があります。
可能な複製(http://stackoverflow.com/questions/20794918/wpf-how-to-use-command- input-bindings) –
あなたは 'InputBindings'を正しく使用していません。上記の答えを確認してください。 –
@EliArbel私はそれを見ています。私はクラスの背後にあるMainWindowコードの外にある静的クラスがmainwindowコンテンツへのアクセス権を持っていることを理解していません。 –