在visual studio中调试时可以进行拖放操作,但在已安装的应用程序上不可以



我有WPF应用程序,我在窗口中的画布上添加了一些鼠标事件,以启用拖放功能。当在调试模式下从visualstudio运行应用程序时,它可以很好地工作,但当我在没有调试的情况下运行该应用程序时它就不工作了。有人能帮忙吗!

XAML

<Canvas Name="canvas"
Width="{Binding DialogWidth, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
Height="{Binding DialogHight, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="Transparent"
PreviewMouseDown="Grid_MouseDown"
PreviewMouseMove="Grid_MouseMove"
PreviewMouseUp="Grid_MouseUp">
<Canvas.RenderTransform>
<TranslateTransform x:Name="tt" />
</Canvas.RenderTransform>
</Canvas>

背后的代码

private Point _mStart;
private Vector _mStartOffset;
private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
{
var window = Application.Current.MainWindow;
var canvas = (Canvas) sender;
var tt = canvas.RenderTransform as TranslateTransform ;
_mStart = e.GetPosition(window);
if (tt != null) _mStartOffset = new Vector(tt.X, tt.Y);
canvas.CaptureMouse();
}
private void Grid_MouseMove(object sender, MouseEventArgs e)
{ 
var canvas = (Canvas)sender;
var tt = canvas.RenderTransform as TranslateTransform;
if (tt == null) return;
var window = Application.Current.MainWindow;
if (!canvas.IsMouseCaptured) return;
var offset = Point.Subtract(e.GetPosition(window), _mStart);
// if (-_mStartOffset.X + canvas.ActualWidth < window?.ActualWidth)
tt.X = _mStartOffset.X + offset.X * -1;
//  if (-_mStartOffset.Y + canvas.ActualHeight < window?.ActualHeight)
tt.Y = _mStartOffset.Y + offset.Y;
}
private void Grid_MouseUp(object sender, MouseButtonEventArgs e)
{
var canvas = (Canvas)sender;
canvas.ReleaseMouseCapture();
}

我找到了解决方案,问题是Application.Current.MainWindow的位置返回0(但命运扭曲,它在调试模式下工作,正如我之前提到的(,当我使用(UIElement(Application.Current.Resources["MainWindow"]时,它就像一个魅力:(

最新更新