2014-07-20 4 views
0

이미지가 있으므로 화면 중앙의 특정 위치에서 이미지가 시작됩니다. 다양한 일이 일어나고이 이미지의 위치를 ​​변경하고 싶지만 변형은 창에 비해 이미지의 이전 위치에 상대적으로 발생합니다. 이 코드가 WPF의 이상한 기능 중 하나 인데요. 내가 이해하지 못하는 이상한 기능이 아닙니다.이미지가 창 대신 원래 위치에 상대적으로 이동합니다.

그럼 이미지를 창에 상대적으로 이동하려면 어떤 방법을 사용해야합니까?

현재 나는이 BTW 작동하지 않습니다

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

을 시도하고있다. 이미지를 이동하지만 이미지는 창 대신 이미지 이전 위치로 이동합니다.

그리고 내가 옮기려고하는 이미지 코드는 다음과 같습니다.

<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에 실제로 포함되어 있지 않다면, 당연히 의지 할 수 없습니다). 아마도 UserControl을 기준으로 Image 컨트롤을 이동하려고합니까? – Clemens

답변

0

정말 움직이고 있습니까? 시도 :

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

당신이 당신의 UserControl을에, 이미지 LetterBlock_MouseDown을 처리하고 고려, 난 당신이 이미지의 인스턴스가 될 것으로 기대 실제로 "this"할 수있는 방법이 표시되지 않습니다. 내가 당신을 가지고있는 경우

+0

시도했지만 이미지를 전혀 움직이지 않습니다. "이"표시기로 움직일 이미지 만 있습니다. – user3796261

+0

귀하의 질문은 매우 불분명합니다. 어느 것이 캔버스인가? LetterBlock 사용자 컨트롤이 캔버스에서 상속합니까? LetterBlock 사용자 정의 컨트롤이 창 전체에 걸쳐 확장되어 있습니까? 또는 이미지와 크기가 같습니까? Snoop을 Dowload하고 게시 할 세부 정보를 추가하십시오. –

+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

관련 문제