簡體   English   中英

如何在WPF中使用Thumb與X的乘數調整元素大小?

[英]How to resize element by multiplier of X with Thumb in WPF?

我正在使用Thumb來調整元素大小。 DragDelta我正在做myElement.Width += e.HorizontalChange 如果我想用乘數100調整大小怎么辦?

我嘗試了myElement.Width += 100 * e.HorizontalChange但是當我拖動它時,它會導致元素“跳舞”。 我認為這是因為相對於元素導致錯誤計算鼠標位置的重大變化。

怎么做?

更新我記錄了我得到的。 我將矩形調整到右側,你可以看到它是如何閃爍的 視頻的播放效果很低,但您仍然可以看到閃爍。 實際情況要糟糕得多。

它看起來Thumb計算相對於自身而不是屏幕的HorizontalChange 因此,如果在拖動時拇指本身沒有用鼠標精確移動,那么HorizontalChange將采用不可靠的值。 此類不良行為的另一個例子

因此,在實現自定義移動/調整大小行為時, Thumb似乎有點幫助。 需要“手動”處理鼠標移動。 雖然,我們仍然可以使用Thumb的事件作為處理鼠標的便利點。

    FrameworkElement elementToResize;
    double initialWidth;
    Point initialMouse;

    private void Thumb_DragStarted(object sender, DragStartedEventArgs e)
    {
        initialWidth = elementToResize.ActualWidth;
        initialMouse = Mouse.GetPosition(Window.GetWindow((DependencyObject)sender));
    }

    private void Thumb_DragDelta(object sender, DragDeltaEventArgs e)
    {
        var horzChange = Mouse.GetPosition(Window.GetWindow((DependencyObject)sender)).X - initialMouse.X;
        elementToResize.Width = initialWidth + 100 * Math.Round(horzChange / 100);
    }

我們需要在屏幕坐標中計算鼠標位置的變化。 這在WPF中並不簡單。 假設在拖動拇指時窗口沒有在屏幕上移動,相對於窗口獲得鼠標位置將適合,如上面的代碼所示。 為了獲得更好的可靠性, 您可以獲得實際的鼠標屏幕坐標 ,但這需要從像素轉換為WPF設備獨立單元。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM