我正在制作一個 uwp 應用程式,它是一個小部件應用程式,如果用戶想要重新定位小部件,(每個小部件都是一個包含內容的堆疊面板),堆疊面板應該根據滑鼠移動,就像在 windows 中拖動應用程式視窗一樣,請幫幫我,我一直在努力,但一無所獲!
uj5u.com熱心網友回復:
要使 StackPanel 可移動,您必須向其添加這兩個事件。
PointerPressed="StackPanel_PointerPressed"
PointerMoved="StackPanel_PointerMoved"
在您的 C# 代碼中,您必須創建一個變數并添加一個 using:
using Windows.Foundation;
private Point MouseDownLocation;
StackPanel_PointerPressed 事件:
private void StackPanel_PointerPressed(object sender, PointerRoutedEventArgs e)
{
if (sender is StackPanel sp)
{
if (e.GetCurrentPoint(sp).Properties.IsLeftButtonPressed)
{
MouseDownLocation.Y = e.GetCurrentPoint(sp).Position.Y;
MouseDownLocation.X = e.GetCurrentPoint(sp).Position.X;
}
}
}
以及 StackPanel_PointerMoved 事件:
private void StackPanel_PointerMoved(object sender, PointerRoutedEventArgs e)
{
if (sender is StackPanel sp)
{
if (e.GetCurrentPoint(sp).Properties.IsLeftButtonPressed)
{
var MarginLeft = e.GetCurrentPoint(sp).Position.X sp.Margin.Left - MouseDownLocation.X;
var MarginTop = e.GetCurrentPoint(sp).Position.Y sp.Margin.Top - MouseDownLocation.Y;
sp.Margin = new Thickness(MarginLeft, MarginTop, sp.Margin.Right, sp.Margin.Bottom);
}
}
}
uj5u.com熱心網友回復:
我碰巧解決了這個問題,雖然沒有@FrozenAssassine 的幫助是不可能的,這是代碼
if (sender is StackPanel sp)
{
if (e.GetCurrentPoint(sp).Properties.IsLeftButtonPressed)
{
var MarginLeft = e.GetCurrentPoint(sp).Position.X sp.Margin.Left - MouseDownLocation.X;
var MarginTop = e.GetCurrentPoint(sp).Position.Y sp.Margin.Top - MouseDownLocation.Y;
var MarginRight = e.GetCurrentPoint(sp).Position.X -sp.Margin.Left 220 - MouseDownLocation.X;
var MarginBottom = e.GetCurrentPoint(sp).Position.Y -sp.Margin.Top 140 - MouseDownLocation.Y;
sp.Margin = new Thickness(MarginLeft, MarginTop, MarginRight, MarginBottom);
}
剛剛對 PointerMoved 函式進行了一些更改,非常感謝 FrozenAssassine !!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/313979.html
