簡單的問題。有:當ScrollBar最大值發生變化時檢測到
<ScrollBar ... />
如何檢測Maximum
何時更改?例如。對於Value
有一個event。
通常會有某種綁定。我想也許有可能得到這個綁定,創建依賴屬性並綁定到它,然後我可以註冊一個回調,當這個新的依賴屬性被改變......但這聽起來很複雜,我相信它是可接受的解決方案所有情況下(例如,如果設置了另一個綁定,我如何檢測這種更改)。輪詢?
簡單的問題。有:當ScrollBar最大值發生變化時檢測到
<ScrollBar ... />
如何檢測Maximum
何時更改?例如。對於Value
有一個event。
通常會有某種綁定。我想也許有可能得到這個綁定,創建依賴屬性並綁定到它,然後我可以註冊一個回調,當這個新的依賴屬性被改變......但這聽起來很複雜,我相信它是可接受的解決方案所有情況下(例如,如果設置了另一個綁定,我如何檢測這種更改)。輪詢?
您可以創建一個自定義類,如:
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);
}
}
在我的案例中'ScrollBar'已經是控件模板的一部分,所以我不能使用自定義控件(除非重新定義完整的控件模板)。但其他人可能會找到有用的答案,謝謝。 – Sinatr
重要的是要了解什麼任何屬性可以是多個綁定一個源。我們可以創建一個新的目標(新的依賴屬性),然後在完全能夠左右做一個屬性的任何變化報告:
創建回調一個新的依賴項屬性。
將其綁定到任何其他屬性以監視更改。
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 });
}
}
我想創建從滾動條繼承了用戶控件和重寫Maximum屬性引發一個事件。 –
@SebastianL,好主意,簡單地覆蓋['OnMaximumChanged'](https://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.rangebase.onmaximumchanged(v = vs.110)。 aspx)升起自定義事件可能會起作用。任何沒有自定義控件的解決 – Sinatr