【问题标题】:Keep clicked ellipse highlighted until other ellipse is clicked保持单击的椭圆突出显示,直到单击其他椭圆
【发布时间】:2015-01-07 18:32:18
【问题描述】:

现在我有一个画布,上面有一堆省略号,无论用户点击哪里。我正在努力做到这一点,所以当他点击一个时,它周围会显示一个黑色边框,直到他点击另一个。现在我只有它,所以当他点击一个时,边框会出现并停留在那里。

这是处理单击椭圆的函数。

    private void ellipse_MouseDown(object sender, MouseButtonEventArgs e)
    {
        e.Handled = true;

        selectedNodeEllipse = (Ellipse)sender;
        SelectedNode = (Node)selectedNodeEllipse.Tag; //just displays some info about the node

        selectedNodeEllipse.Stroke = Brushes.Black;

    }

所有省略号都在一个列表中(节点类型)。

有什么想法吗?

【问题讨论】:

  • 之前的中风是什么?为什么不能在分配新的selectedNodeEllipse 值之前将Stroke 属性设置回原始值?
  • Stroke 之前没有设置,所以它只是默认值。但我通过执行“selectedNodeEllipse.Stroke = default();”尝试了你所说的它一直说“类型预期”错误。
  • 当然。如果不提供类型,则不能使用 default 关键字。如果你没有明确设置Stroke,默认应该是null。所以只需使用它:selectedNodeEllipse.Stroke = null;
  • 哇,谢谢。不知道我怎么没听懂。我使用您的建议做了类似于沃尔特在下面所做的事情,并且奏效了。谢谢!

标签: c# wpf canvas mouseevent ellipse


【解决方案1】:

将先前的椭圆和画笔存储在一个变量中,并在分配新的笔画属性时检索数据。

代码

private Ellipse selectedNodeEllipse;
private Ellipse previousEllipse = null;
private Brush previousBrush;

private void ellipse_MouseDown(object sender, MouseButtonEventArgs e) {

  e.Handled = true;
  if (previousEllipse != null)
  {
    previousEllipse.Stroke = previousBrush;
  }
  selectedNodeEllipse = (Ellipse)sender;
  previousEllipse = selectedNodeEllipse;
  previousBrush = previousEllipse.Stroke;
  SelectedNode = (Node)selectedNodeEllipse.Tag; //just displays some info about the node

  selectedNodeEllipse.Stroke = Brushes.Black;

}

【讨论】:

  • 谢谢!做了一些与你所做的类似的事情,并且效果很好。
  • previousEllipse 的意义何在?这与selectedNodeEllipse 的值何时不同?
  • @PeterDuniho selectedNodeEllipse 是对用户用鼠标选择的椭圆的引用。我使用 previousEllipse 来跟踪用户上次选择椭圆时选择的椭圆。否则,你怎么知道应用旧画笔的椭圆?
  • 我想我的评论太微妙了。 “前一个画笔”是(根据 OP)null,应用该值的椭圆是当前选择更改之前的当前选择的椭圆。您的答案有效,但其中的代码几乎是实际需要的两倍。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多