none
metro canvas GotFocus和 LostFocus RRS feed

  • 问题

  • 现使用Canvas想实现某些功能, 在文档中存在的这两个事件

    但是我却无法捕捉到Canvas的GotFocus和LostFocus

    需求:

    点击Canvas区域, 对Canvas做一些操作. 这个已用PointerPressed代替实现, 但是存在一个问题: 只有点击Canvas中存在的另一个控件, 才能捕捉到这个事件.  

    点击Canvas区域外, 对Canvas做一些操作. 这个还没有实现, 有什么好办法么?

    或者还有其它思路实现这个么需求么. 希望是基于Canvas的

    2012年5月8日 9:39

答案

  • Canvas本身是不可获焦点。GotFocus LostFocus只在路由事件过程中由其他控件的此事件路由才触发。

    〉〉点击Canvas区域外, 对Canvas做一些操作. 这个还没有实现, 有什么好办法么?

    你的Canvas可以放在一个外部的Grid或者其他容器中,然后在这个容器上实现 PointerPressed ,最后在事件中你可以判断e.OriginalSource是谁,如果是Canvas,那么做相应的点击Canvas操作,如果不是,作相应离开Canvas操作:

        <Grid x:Name="grid" Background="{StaticResource ApplicationPageBackgroundBrush}" PointerPressed="Grid_PointerPressed_1">
            <Canvas x:Name="MyCanvas" Width="100" Background="White" Height="200"/>
        </Grid>

    C#:

            private void Grid_PointerPressed_1(object sender, PointerEventArgs e)
            {
                Canvas canvas = e.OriginalSource as Canvas;
                if (canvas != null && canvas.Name == "MyCanvas")
                {
                }
                else { }
            }

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

    2012年5月9日 10:30
    版主

全部回复

  • Canvas本身是不可获焦点。GotFocus LostFocus只在路由事件过程中由其他控件的此事件路由才触发。

    〉〉点击Canvas区域外, 对Canvas做一些操作. 这个还没有实现, 有什么好办法么?

    你的Canvas可以放在一个外部的Grid或者其他容器中,然后在这个容器上实现 PointerPressed ,最后在事件中你可以判断e.OriginalSource是谁,如果是Canvas,那么做相应的点击Canvas操作,如果不是,作相应离开Canvas操作:

        <Grid x:Name="grid" Background="{StaticResource ApplicationPageBackgroundBrush}" PointerPressed="Grid_PointerPressed_1">
            <Canvas x:Name="MyCanvas" Width="100" Background="White" Height="200"/>
        </Grid>

    C#:

            private void Grid_PointerPressed_1(object sender, PointerEventArgs e)
            {
                Canvas canvas = e.OriginalSource as Canvas;
                if (canvas != null && canvas.Name == "MyCanvas")
                {
                }
                else { }
            }

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

    2012年5月9日 10:30
    版主
  • 看来还是思路上的问题 谢谢
    2012年5月10日 6:50