2014-07-20 55 views
0

所以我有一個圖像,並且我已經在屏幕中間的特定位置開始。發生各種各樣的事情,我想改變這個圖像的位置,但是相對於圖像的先前位置而不是相對於窗口發生轉換。我感覺這不是我的代碼有問題,而只是WPF的一些奇怪的特性,我沒有理解。圖像相對於原始位置而不是窗口移動

那麼我應該用什麼方法將圖像相對於窗口移動?

我目前正試圖

 Canvas.SetLeft(this, location.X); 
     Canvas.SetTop(this, location.Y); 

這並不BTW工作。它移動圖像,但圖像相對於圖像先前位置而不是窗口移動。

這裏是我試圖移動的圖像的代碼。

<UserControl x:Class="UserControls.LetterBlock" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d"> 
<UserControl.Resources> 
    <ResourceDictionary Source="../Dictionaries/LetterBlockTypes.xaml" /> 
</UserControl.Resources> 

<Image Name="LB" HorizontalAlignment="Left" VerticalAlignment="Top" Source="{DynamicResource BLB}" Width="50" Height="50" 
     MouseDown="LetterBlock_MouseDown" MouseMove="LetterBlock_MouseMove" MouseUp="LetterBlock_MouseUp" > 
</Image> 
</UserControl> 
+1

我認爲,由於您的父級畫布沒有被宣佈佔用整個屏幕大小,所以這是可以預料的。我猜畫布會自動給出用戶控件的尺寸。 –

+0

你可以發佈'LetterBlock_MouseMove'的完整事件處理程序嗎? – pushpraj

+0

在UserControl上調用'Canvas.SetLeft'和'Canvas.SetTop'本身沒什麼意義(除非它真的包含在Canvas中,當然你不能依賴它)。您是否打算將Image控件相對於UserControl? – Clemens

回答

0

您確定您正在移動圖片嗎?嘗試:

Canvas.SetLeft(yourImage, location.X); 
    Canvas.SetTop(yourImage, location.Y); 

考慮到你正在處理圖像LetterBlock_MouseDown,在你的用戶控件,我看不出你如何能指望圖像的實例是實際上是「this」。

+0

試過,它根本不移動圖像。我只是通過「this」指標來移動圖像。 – user3796261

+0

你的問題很不清楚。哪一個是帆布? LetterBlock用戶控件是否從畫布繼承? LetterBlock用戶控件是否跨越窗口延伸或與Image具有相同的大小?下載Snoop,添加更多的細節發佈。 –

+0

這不起作用,因爲圖像控件未包含在畫布中(這從問題中很明顯)。 – Clemens

0

如果我給你正確的,這將解決您的問題

Point location = e.GetPosition(Application.Current.MainWindow); 
    Canvas.SetLeft(this, location.X); 
    Canvas.SetTop(this, location.Y); 

你可能試圖檢索基於用戶的控制或圖像鼠標位置的鼠標移動事件。但是您應該檢索主窗口,而不是您想要的位置相對於窗口。

下面的示例將用於檢索鼠標相對於主窗口的位置。如果有其他窗口,則可能需要相應地傳遞參考。

e.GetPosition(Application.Current.MainWindow); 
+0

我試圖當我到我的編程計算機。聽起來很有希望。 – user3796261

相關問題