图像阻挡了画布

时间:2013-08-14 11:38:01

标签: wpf

<Image Width="640" Height="480"  Name="ImageControl" Grid.Column="0" Grid.Row="1" />
<Canvas Width="620" Height="480" Name="myCanvas" Grid.Column="0" Grid.Row="1" >
    <Ellipse Width="10" Height="10" Fill="Red" Canvas.Left="610" Canvas.Top="10" Name="Circle1" Canvas.ZIndex="99" />
    <Ellipse Width="10" Height="10" Fill="Red" Canvas.Left="610" Canvas.Top="30" Name="Circle2" />
    <Ellipse Width="10" Height="10" Fill="Red" Canvas.Left="610" Canvas.Top="50" Name="Circle3" />
    <Ellipse Width="10" Height="10" Fill="Red" Canvas.Left="610" Canvas.Top="70" Name="Circle4" />
    <Ellipse Width="10" Height="10" Fill="Red" Canvas.Left="610" Canvas.Top="90" Name="Circle5" />
    <Ellipse Width="10" Height="10" Fill="Red" Canvas.Left="610" Canvas.Top="110" Name="Circle6" />
    <Ellipse Width="10" Height="10" Fill="Red" Canvas.Left="610" Canvas.Top="130" Name="Circle7" />
    <Ellipse Width="10" Height="10" Fill="Red" Canvas.Left="610" Canvas.Top="150" Name="Circle8" />
</Canvas>

我在网格中的同一个单元格中有一个图像和一个画布。我们的想法是将8个红色椭圆放在图像上。由于Kinect用于提供图像,因此Image目前没有来源。当它第一次加载时,红色椭圆可以瞬间看到,直到图像加载,然后再看不到它们。

我试过改变了元素的顺序,Canvas的ZIndex,Grid的ZIndex都无济于事。

this.ImageControl.Source = BitmapSource.Create(
                imageFrame.Width,
                imageFrame.Height,
                96,
                96,
                PixelFormats.Bgr32,
                null,
                this.pixelData,
                stride);

这是Kinect流图像分配给图像源的方式。

2 个答案:

答案 0 :(得分:1)

您是否尝试使用其他图片源?
这个对我有用。
尝试使用Windows中的一个示例图片。

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="537" Width="721">
  <Grid>
    <Image Width="640" Height="480"  Name="ImageControl" Grid.Column="0" Grid.Row="1" Source="Desert.jpg" />
    <Canvas Width="620" Height="480" Name="myCanvas" Grid.Column="0" Grid.Row="1" >
      <Ellipse Width="10" Height="10" Fill="Red" Canvas.Left="610" Canvas.Top="10" Name="Circle1" Canvas.ZIndex="99" />
      <Ellipse Width="10" Height="10" Fill="Red" Canvas.Left="610" Canvas.Top="30" Name="Circle2" />
      <Ellipse Width="10" Height="10" Fill="Red" Canvas.Left="610" Canvas.Top="50" Name="Circle3" />
      <Ellipse Width="10" Height="10" Fill="Red" Canvas.Left="610" Canvas.Top="70" Name="Circle4" />
      <Ellipse Width="10" Height="10" Fill="Red" Canvas.Left="610" Canvas.Top="90" Name="Circle5" />
      <Ellipse Width="10" Height="10" Fill="Red" Canvas.Left="610" Canvas.Top="110" Name="Circle6" />
      <Ellipse Width="10" Height="10" Fill="Red" Canvas.Left="610" Canvas.Top="130" Name="Circle7" />
      <Ellipse Width="10" Height="10" Fill="Red" Canvas.Left="610" Canvas.Top="150" Name="Circle8" />
    </Canvas>
  </Grid>
</Window>

答案 1 :(得分:1)

原来我在我的代码

中处理这个问题
myCanvas.Children.Clear();

这清除了不再需要画布上绘制的线条骨架,这也是删除了省略号。