【问题标题】:How to remove line on tapped point inside canvas in Windows Phone 8?如何在 Windows Phone 8 画布内的点击点上删除线?
【发布时间】:2013-12-17 07:35:37
【问题描述】:

我试图用手指在 windows phone 画布上画一条线,我这样做了,但是当我尝试删除/清除那条线时,它正在删除该画布中的所有元素,

ContentPanelCanvas.Children.Clear();

听到的是我的完整代码:

XAML

  <Canvas x:Name="ContentPanelCanvas" Grid.Row="1" Background="Transparent"  Margin="12,0,12,0">

        <Grid Width="450" Height="600">
        <Button x:Name="clickMeBtn" Height="72"
                Width="200"
                Content="Click Me" 
                HorizontalAlignment="Center"
                VerticalAlignment="Center" Click="clickMeBtn_Click" />
         </Grid>
   </Canvas>

C# 代码是这样的:

 public MainPage()
    {
        InitializeComponent();
        this.ContentPanelCanvas.MouseMove += new MouseEventHandler(ContentPanelCanvas_MouseMove);
        this.ContentPanelCanvas.MouseLeftButtonDown += new MouseButtonEventHandler(ContentPanelCanvas_MouseLeftButtonDown);
    }

    void ContentPanelCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        currentPoint = e.GetPosition(ContentPanelCanvas);
        oldPoint = currentPoint;
    }

    void ContentPanelCanvas_MouseMove(object sender, MouseEventArgs e)
    {

            currentPoint = e.GetPosition(this.ContentPanelCanvas);

            line = new Line() { X1 = currentPoint.X, Y1 = currentPoint.Y, X2 = oldPoint.X, Y2 = oldPoint.Y };
            line.Stroke = new SolidColorBrush(Colors.White);
            line.StrokeThickness = 10;
            this.ContentPanelCanvas.Children.Add(line);
            oldPoint = currentPoint;
    }

    private void clickMeBtn_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("Hello Every One ");
        ContentPanelCanvas.Children.Clear();

    }

代码执行没有错误,但它正在删除按钮,我怎样才能只删除我绘制的线条

【问题讨论】:

    标签: c# windows-phone-7 canvas windows-phone-8


    【解决方案1】:

    好吧,代码完全按照您编写的方式执行,它正在清除 ContentPanelCanvas 的所有子代。如果您只想删除行,则只删除行:

    foreach (var line in ContentPanelCanvas.Children.OfType<Line>().ToList())
        ContentPanelCanvas.Children.Remove(line);
    

    【讨论】:

    • 我将它用于 wp8.1 silverlight。我可以从一条线上删除一个点或一部分,而不是整条线。我还有一张画布的背景图片。
    【解决方案2】:

    你可以使用

     ContentPanelCanvas.Children.Remove(Line);
    

    或按索引删除子项

    ContentPanelCanvas.Children.RemoveAt(1);
    

    【讨论】:

      【解决方案3】:

      如果您清除画布,它将“来自 UIElementCollection 的Removes all elements”。

      您应该创建一个带有 line 的事件处理程序,例如 tap 事件处理程序,一旦点击,您应该将 line 控件保持在另一个控件中以删除,然后在按钮单击处理程序中像这样删除它

      ContentPanelCanvas.Children.Remove(controlToDelete);
      

      controlToDelete 是您持有的要从 line tap 处理程序中删除的控件,即 line control

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-14
        相关资源
        最近更新 更多