我遇到了一個依賴屬性問題,它不會觸發更改。設置如下。我有一個充當ScrollViewer調解器的類,在那裏我有一個ScrollViewer類型的依賴屬性,以及2個double,VerticalOffsetNew和VerticalScrollOffset。所以我附上一個previewmousewheel事件來抓取來自鼠標滾輪的事件。WPF DependencyProperty只能觸發一次
在這個事件中,我抓取scrollviewers當前偏移量並將VerticalScrollOffset設置爲該值。然後,根據增量,我將VerticalOffsetNew設置爲偏移+增量。
現在我看到的問題如下。 VerticalScrollOffset在第一次後似乎不會被設置。我有一個onpropertychange事件,並且斷點只在第一次出現。在預覽事件(verticaloffsetnew)中設置的其他屬性每次都會被設置爲沒有問題。
有什麼想法?
public double VerticalScrollOffset
{
get { return (double)GetValue(VerticalScrollOffsetProperty); }
set { SetValue(VerticalScrollOffsetProperty, value); }
}
public static readonly DependencyProperty VerticalScrollOffsetProperty =
DependencyProperty.Register("VerticalScrollOffset", typeof(double),
typeof(ScrollViewerOffsetMediator), new PropertyMetadata(OnVerticalScrollOffsetChanged));
public static void OnVerticalScrollOffsetChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
ScrollViewerOffsetMediator mediator = (ScrollViewerOffsetMediator)d;
}
以上是我的DP只在預覽代碼中設置一次,下面是預覽代碼。
private void CustomPreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
double mouseWheelChange = (double)e.Delta;
ScrollViewer thisScroller = (ScrollViewer)sender;
// not sure why the delta is so large here
//double newVOffset = this.VerticalOffset - (mouseWheelChange/40);
// forcing scroll wheel to iterate by 8
mouseWheelChange /= Math.Abs(mouseWheelChange);
double newVOffset = thisScroller.VerticalOffset - (mouseWheelChange * 8);
// this does not trigger a change after the first time for some
// some strange reason !!!!!!!
this.VerticalScrollOffset = thisScroller.VerticalOffset;
if (newVOffset < 0)
{
this.VerticalOffset = 0;
}
else if (newVOffset > thisScroller.ScrollableHeight)
{
this.VerticalOffset = thisScroller.ScrollableHeight;
}
else
{
this.VerticalOffset = newVOffset;
}
e.Handled = true;
}
感謝您的任何幫助。
更新
因此,有別的東西,我已經注意到,預覽鼠標調用同時更新VerticalOffset和VerticalScrollOffset。兩者都是DP的,現在有趣的是,在VerticalOffset的變化事件中,有一個調用動畫方法的動畫,該動畫方法將動畫VerticalScrollOffset DP。看起來,當我刪除這個電話時,兩個DP都改變了,但是一旦我有了它,它就會失敗。有沒有一些限制或衝突可能出現,我沒有看到或WPF默默地嘗試解決?
再次感謝。
您是否確定`thisScroller.VerticalOffset`產生的後續值實際上與原始值不同?如果不是這樣,那就可以解釋爲什麼你的改變的處理程序不被重新執行,因爲這個值沒有改變。 – 2011-02-07 19:16:33
是的,我之前檢查過,這個值實際上與當前設置的值不同。謝謝。 – Nithos 2011-02-07 20:45:46