none
用户控件如何响应键盘事件 RRS feed

  • 问题

  • 我写好了一个用户控件,并在内部添加了KeyDown事件的处理函数OnKeyDown,然后将用户控件添加到一个窗口中,按下键盘,结果却进不到OnKeyDown函数中去。请高手指教。

    <usercontrol d:designheight="480" d:designwidth="640" keydown="GridKeyDown" mc:ignorable="d" x:class="UserControlDemo.MyViewport3D" x:name="UserControlDemo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:gauge="clr-namespace:CircularGauge;assembly=CircularGauge" xmlns:local="clr-namespace:UserControlDemo" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    	
    	<grid x:name="LayoutRoot">
            <viewport3d cliptobounds="True" grid.column="0" grid.row="0" margin="8">
    			<viewport3d.camera>
    				<perspectivecamera farplanedistance="100" fieldofview="45" lookdirection="0,0,-8.02455201088572" nearplanedistance="0.1" position="0.651300013065341,4.44089209850063E-16,9.96955194412852" updirection="0,1,0"></perspectivecamera>
    			</viewport3d.camera>
            </viewport3d>
            </grid>
    </usercontrol>

    xaml文件中这么写的,但是调试的时候进不到GridKeyDown函数里去
    2012年2月9日 7:51

答案

  • 难道是因为Grid、Viewport3D无法获得焦点,所以焦点一直位于调用用户控件的窗口中,所以键盘按下事件就不会路由到用户控件内部导致的吗?

    是的, 所以你要设置

    <Grid x:Name="LayoutRoot" Focusable="True">


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年2月9日 9:12
    版主

全部回复