none
TreeViewにHyperlinkを入れて矢印キーで選択すると例外が発生する RRS feed

  • 質問

  • TreeViewについて質問させてください。
    WPFのTreeViewはTreeViewItemの中に文字列だけでなくボタンなどのコントロールを入れることもできますが、
    例えば以下のコードのように、

    <TreeView>
    	<TreeViewItem Header="NormalText">
    		<TreeViewItem Header="AAA"/>
    		<TreeViewItem Header="BBB"/>
    	</TreeViewItem>
    	<TreeViewItem>
    		<TreeViewItem.Header>
    			<TextBlock><Hyperlink>LinkedText</Hyperlink></TextBlock>
    		</TreeViewItem.Header>
    	</TreeViewItem>
    </TreeView>
    
    

    Hyperlinkを入れると、選択アイテムを変更するために矢印キーを押した瞬間
    「'System.Windows.Documents.Hyperlink' は、Visual または Visual3D ではありません。」という例外が発生してしまいます。
    しかし、マウスを使ってアイテムを選択したときやPgUp, PgDn, Home, Endキーで選択したときは例外が発生せず正常に動作します。

    Button, CheckBox, RadioButton等のSystem.Windows.Controls系のコントロールはもちろん、
    Bold, Underline, LineBreak等のHyperlink以外のSystem.Windows.Documents系のコントロールを入れたときもこのような現象は発生せず、
    Hyperlinkを使ったときだけ例外が発生するようなのですが、他の方の環境でも再現するでしょうか?
    また、どなたか回避する方法をご存じないでしょうか?
    2010年1月15日 18:12

回答

すべての返信

  • 確かに再現しますね。
    Hyperlink 要素の KeyboardNavigation.IsTabStop 添付プロパティを False にすれば回避できるようです。
    2010年1月16日 1:09
  • こんにちは、フォーラムオペレーターの高橋春樹です。

    Hongliangさん
    いつもお世話になっております。

    vernicifluumさん、
    MSDNフォーラムのご利用有難うございます。

    こちらでも調べたところ、US版MSDNフォーラムでも同じような投稿がありました。

    InvalidOperationException: 'System.Windows.Documents.Hyperlink' is not a Visual or Visual3D
    http://social.msdn.microsoft.com/forums/en-US/wpf/thread/5982cafe-f75b-42b4-99dc-50d3a81b30b0/

    こちらではHyperlinkのFocusableプロパティをFalseにして対応してほしいとの事でした。
    <Hyperlink Focusable="False">LinkedText</Hyperlink>

    KeyboardNavigation.IsTabStopも確認しましたが、これでも回避出来るようですね。

    今回、Hongliangさんからのアドバイスが有用な情報だと思いましたので、勝手ながら回答マークを付けさせてもらいました。

    今後ともMSDNフォーラムを宜しくお願いします。


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    2010年1月25日 9:14