[英]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.