2017-02-15 48 views
0

簡單的問題。有:當ScrollBar最大值發生變化時檢測到

<ScrollBar ... /> 

如何檢測Maximum何時更改?例如。對於Value有一個event

通常會有某種綁定。我想也許有可能得到這個綁定,創建依賴屬性並綁定到它,然後我可以註冊一個回調,當這個新的依賴屬性被改變......但這聽起來很複雜,我相信它是可接受的解決方案所有情況下(例如,如果設置了另一個綁定,我如何檢測這種更改)。輪詢?

+1

我想創建從滾動條繼承了用戶控件和重寫Maximum屬性引發一個事件。 –

+0

@SebastianL,好主意,簡單地覆蓋['OnMaximumChanged'](https://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.rangebase.onmaximumchanged(v = vs.110)。 aspx)升起自定義事件可能會起作用。任何沒有自定義控件的解決 – Sinatr

回答

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); 

    } 
} 
+0

在我的案例中'ScrollBar'已經是控件模板的一部分,所以我不能使用自定義控件(除非重新定義完整的控件模板)。但其他人可能會找到有用的答案,謝謝。 – Sinatr

0

重要的是要了解什麼任何屬性可以是多個綁定一個。我們可以創建一個新的目標(新的依賴屬性),然後在完全能夠左右做一個屬性的任何變化報告:

  1. 創建回調一個新的依賴項屬性。

  2. 將其綁定到任何其他屬性以監視更改。

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 }); 
    } 
} 
相關問題