检测ScrollBar Maximum何时更改

时间:2017-02-15 10:14:16

标签: c# wpf scrollbar

简单的问题。具有:

<ScrollBar ... />

如何检测Maximum何时更改?例如。对于Value,有一个event

通常会有某种绑定。我想也许有可能得到这个绑定,创建依赖属性并绑定到它,然后我可以在这个新的依赖属性被更改时注册一个回调...但这听起来很复杂,我相信它是可以接受的解决方案所有情况(例如,如果设置了另一个绑定,我该如何检测这种变化)。轮询?

2 个答案:

答案 0 :(得分:1)

您可以创建自定义类,例如:

public class MScrollBar : System.Windows.Controls.Primitives.ScrollBar
{ 

    protected override void OnMaximumChanged(double oldMaximum, double newMaximum)
    {
        // do stuff
        base.OnMaximumChanged(oldMaximum, newMaximum);
    }
}

或者

public class MScrollBar : System.Windows.Controls.Primitives.ScrollBar
{
    protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
    {
        if (e.Property == System.Windows.Controls.Primitives.ScrollBar.MaximumProperty)
        {
            // do stuff
        }
        base.OnPropertyChanged(e);

    }
}

答案 1 :(得分:0)

了解多个绑定的任何属性来源非常重要。我们可以创建一个新的目标(新的依赖属性),然后完全能够报告对属性所做的任何更改:

  1. 使用回调创建新的依赖项属性。

  2. 将其绑定到任何其他属性以监控更改。

  3. public partial class MainWindow : Window
    {
        public double Maximum
        {
            get { return (double)GetValue(MaximumProperty); }
            set { SetValue(MaximumProperty, value); }
        }
        public static readonly DependencyProperty MaximumProperty =
            DependencyProperty.Register("Maximum", typeof(double), typeof(MainWindow), new PropertyMetadata(0, (d, e) =>
            {
                // value has changed
            }));
    
        public MainWindow()
        {
            InitializeComponent();
            var scrollBar = ... // instance of scrollbar
            BindingOperations.SetBinding(this, MaximumProperty,
                new Binding(nameof(RangeBase.Maximum)) { Source = scrollBar });
        }
    }