2017-02-15 1 views
0

Einfache Frage. Mit:Erkennen, wenn ScrollBar Maximum geändert wird

<ScrollBar ... /> 

Wie kann ich erkennen, wenn Maximum geändert wird? Z.B. für Value gibt es eine event.

Normalerweise würde es eine Art Bindung geben. Ich dachte, vielleicht ist es möglich, diese Bindung zu bekommen, erstellen Abhängigkeitseigenschaft und binden Sie stattdessen, dann kann ich einen Rückruf registrieren, wenn diese neue Abhängigkeitseigenschaft geändert wird ... aber das klingt kompliziert, noch bin ich sicher, dass es eine akzeptable Lösung ist alle Fälle (zB was ist, wenn eine andere Bindung gesetzt ist, wie kann ich diese Art von Änderung erkennen). Umfrage?

+1

ich ein Usercontrol von ScrollBar und überschreiben Sie die Maximum-Eigenschaft geerbt schaffen würde, ein Ereignis zu erhöhen. –

+0

@SebastianL, gute Idee, einfach überschreiben ['OnMaximumChanged'] (https://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.rangebase.onmaximumchanged (v = vs.110). aspx) um benutzerdefinierte Ereignis zu steigen, kann funktionieren. Jede Lösung ohne benutzerdefinierte Steuerung? – Sinatr

Antwort

1

Sie können eine benutzerdefinierte Klasse erstellen, wie zum Beispiel:

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

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

Oder

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

In meinem Fall war 'ScrollBar' bereits ein Teil der Kontrollschablone, daher kann ich das benutzerdefinierte Steuerelement nicht verwenden (es sei denn, es wurde eine vollständige Kontrollschablone neu definiert). Aber jemand anders kann die Antwort nützlich finden, danke. – Sinatr

0

Es ist wichtig, zu verstehen, was jede Eigenschaft eine Quelle für mehrere Bindungen sein kann. Wir können ein neues Ziel (neue Abhängigkeitseigenschaft) erstellen, die dann durchaus in der Lage ist, über jede Änderung einer Eigenschaft getan zu berichten:

  1. Erstellen Sie eine neue Abhängigkeitseigenschaft mit Rückruf.

  2. Binden Sie es an eine andere Eigenschaft, um Änderungen zu überwachen.

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 }); 
    } 
} 
Verwandte Themen