none
xamlで複数の列挙定数を指定するには? RRS feed

  • 質問

  • XAMLで

    "ModifierKeys.Control | ModifierKeys.Shift"

    のような、複数の列挙定数を結合した値を使用するには、どのような記述を行えば良いのでしょうか?

    下のXAMLでは ApplicationCommands.Open に "Ctrl+O" を割り当てていますが、これを、その下のC#のコードのように "Ctrl+Shift+O" を割り当てるように変更したいと思い、

    Modifiers="Control"

    の部分を

    Modifiers="Control Shift"、Modifiers="Control | Shift"、Modifiers="Control,Shift"

    等と書き換えてみたのですが、例外が発生してしまい、どのように書くべきかわからずにいます。

    よろしくお願い致します。

    ======================== xaml ======================
    <Window x:Class="WindowsApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
     <Window.InputBindings>
      <KeyBinding Command="ApplicationCommands.Open"

         Modifiers="Control"

         Key="O" />
     </Window.InputBindings>
     <Grid></Grid>
    </Window>
    ===================================================

    ======================== C# ========================
       KeyBinding OpenCmdKeyBinding = new KeyBinding(
        ApplicationCommands.Open,
        Key.O,
        ModifierKeys.Control | ModifierKeys.Shift);
       this.InputBindings.Add(OpenCmdKeyBinding);
    ===================================================

    2006年11月6日 18:38

回答

  • 少なくとも,Modifiersの場合は,

     Modifiers="Control+Shift"

    で行けたと思うんですが...。たしか,ヘルプのどこかに記述があったような。

    2006年11月7日 0:15
  • プロパティやイベントの属性のその文字列の中に,

     1. {} があれば,マークアップ拡張での独自解釈。
     2. そのプロパティ自身もしくはそのプロパティの型に,TypeConverter属性が付いていれば,そのコンバータ。
     3. プリミティブ型への変換

    の優先順になります。

    で,Modifiersプロパティは,ModifierKeys型になっており,
    それにTypeConverter属性が付いていて,ModifierKeysConverterクラスになってます。
    なので,ふつうは,
    そのクラス(ModifierKeysConverter Class)のヘルプにその手の説明がないといけないと思うんだけど,
    今のところないですね。

    ただ,今後はその探し方でヘルプを見ればわかるようになるんじゃないかと思います。

    2006年11月7日 1:31

すべての返信

  • 少なくとも,Modifiersの場合は,

     Modifiers="Control+Shift"

    で行けたと思うんですが...。たしか,ヘルプのどこかに記述があったような。

    2006年11月7日 0:15
  • プロパティやイベントの属性のその文字列の中に,

     1. {} があれば,マークアップ拡張での独自解釈。
     2. そのプロパティ自身もしくはそのプロパティの型に,TypeConverter属性が付いていれば,そのコンバータ。
     3. プリミティブ型への変換

    の優先順になります。

    で,Modifiersプロパティは,ModifierKeys型になっており,
    それにTypeConverter属性が付いていて,ModifierKeysConverterクラスになってます。
    なので,ふつうは,
    そのクラス(ModifierKeysConverter Class)のヘルプにその手の説明がないといけないと思うんだけど,
    今のところないですね。

    ただ,今後はその探し方でヘルプを見ればわかるようになるんじゃないかと思います。

    2006年11月7日 1:31
  • 稍丼さん、ありがとうございました。

    Modifiers="Control + Shift" で例外も出なくなり、"Ctrl+Shift+O" でコマンドが実行されるようになりました。

    指定方法の調べ方も教えて頂いたので、他の部分でも悩まずに進められそうです。

    2006年11月7日 2:50