none
C# Canvas 貌似不是程序一启动就加载的 RRS feed

  • 问题

  • 很久没来了,最近又遇到问题了。

    我发现WPF中的Canvas,哪怕已经在XAML中添加好了,但不是程序加载后就加载的。以下是XAML的代码:

    <TabItem Header="图形测试" HorizontalAlignment="Left" Height="19" VerticalAlignment="Top" Width="59">
     <Grid >
      <Canvas Name="myCanvas" Visibility="Visible" IsEnabled="True" MouseWheel="myCanvas_MouseWheel" MouseUp="myCanvas_MouseUp" MouseMove="myCanvas_MouseMove" MouseLeftButtonDown="myCanvas_MouseLeftButtonDown" />
     </Grid>
    </TabItem>

    这是我Tab中的第一个Tab,其中的鼠标事件,在一开始,无论如何经过Canvas,都不会激活Canvas,直到我往Canvas添加了一些Children后,才会激活这些事件。

    哪怕我在Window_Loaded事件中加入“myCanvas.IsEnabled = true;”,问题也依旧。

    这是为什么?Canvas的加载有什么秘密吗?

    2016年6月4日 2:57

答案

  • 你好 OpenNovo:

    Canvas是加载了的,不过因为Canvas本身只是个面板,仅仅用于布局,一般是不直接参与交互的。

    如果有子元素的话,子元素的事件就会冒泡到Canvas,看起来就想是Canvas触发的一样。

    当然如果你确实需要Canvas也响应这些事件,只需要设置Background属性(任何颜色都行,甚至是Transparent),这样Canvas就能响应事件了。

    • 已标记为答案 OpenNovo 2016年6月6日 6:14
    2016年6月4日 4:05

全部回复

  • 你好 OpenNovo:

    Canvas是加载了的,不过因为Canvas本身只是个面板,仅仅用于布局,一般是不直接参与交互的。

    如果有子元素的话,子元素的事件就会冒泡到Canvas,看起来就想是Canvas触发的一样。

    当然如果你确实需要Canvas也响应这些事件,只需要设置Background属性(任何颜色都行,甚至是Transparent),这样Canvas就能响应事件了。

    • 已标记为答案 OpenNovo 2016年6月6日 6:14
    2016年6月4日 4:05
  • 谢谢,后来我也大致发现了,要至少添加一个成员才行;此外,也发现成员的添加是引用传递的,通过改变成员参数,可以起到实时更新的作用。
    2016年6月6日 6:15