WPF 如何使用属性重绘另一个元素

本文关键字:另一个 元素 属性 何使用 WPF | 更新日期: 2023-09-27 18:33:28

所以我有一个名为信号图的类,我想在scrollviewer执行任务时更新它。

信号图通过以下依赖属性连接到滚动查看器:

 public double MinimumXInDIPs
    {
      get { return (double)GetValue(MinimumXInDIPsProperty); }
      set
      {
        SetValue(MinimumXInDIPsProperty, value);
      }
    }
    public static readonly DependencyProperty MinimumXInDIPsProperty =
      DependencyProperty.Register("MinimumXInDIPs",
      typeof(double), typeof(SignalGraph),
      new FrameworkPropertyMetadata(new double()));
    public double ViewportWidth
    {
      get { return (double)GetValue(ViewportWidthProperty); }
      set
      {
        SetValue(ViewportWidthProperty, value);
      }
    }
    public static readonly DependencyProperty ViewportWidthProperty =
      DependencyProperty.Register("ViewportWidth",
      typeof(double), typeof(SignalGraph),
      new FrameworkPropertyMetadata(new double()));

    public int UnitsOfTimePerAxisDivision
    {
      get { return (int)GetValue(UnitsOfTimePerAxisDivisionProperty); }
      set
      {
        SetValue(UnitsOfTimePerAxisDivisionProperty, value);
      }
    }
    public static readonly DependencyProperty UnitsOfTimePerAxisDivisionProperty =
      DependencyProperty.Register("UnitsOfTimePerAxisDivision",
      typeof(int), typeof(SignalGraph),
      new FrameworkPropertyMetadata(1));

但是,我不想只对三个属性中的每一个使用依赖属性回调,因为所有这三个属性都可能在缩放时更改,这将导致重绘信号图的次数过多。

通常,我认为我只会将所有信号图注册到 ZoomEvent 上,但信号图无法直接访问滚动查看器。我认为在 WPF 中,以某种方式使用属性连接它们会更自然。

我可以在滚动查看器上创建一个属性布尔值 需要重绘,我仅在缩放发生时将其设置为 true。 然后,我可以将信号图绑定到该属性,并有一个调用重绘函数的属性更改回调。 但是,如果我将 bool 重置为 false,它最终会再次调用 propertychanged回调,即使我真的不需要调用该函数。

这会不会效率低下?我觉得在某些方面事件会更干净,因为当我将值设置为 true(导致重绘(时,我不会首先调用属性更改回调,然后在将值设置回 false 时再次调用(导致回调中没有代码,只是一个无用的测试(>

我想这没什么大不了的,但我只是想知道人们会推荐什么。

相反,我想更新一次

WPF 如何使用属性重绘另一个元素

使用"NeedsToRedraw"似乎可以正常工作,多余的属性更改回调不太可能导致性能瓶颈。 但是,也许其中之一是更好的选择:

  1. 由于这三个属性是连接的,因此将它们放在包装类(如 ZoomProperties 或其他(中。 (当然,这也需要改变消费者类。
  2. 在目标上添加计时器。 在属性更改时启动/重置它,并且仅在某个增量(可能是 50 毫秒?(经过时才触发处理程序。