2014-04-29 1 views
0

<Image>이있는 WPF 창이 있는데이 노드의 자식 FrameworkElement는 <Rectangle>입니다. 원하는 동작은 이미지의 주위를 움직일 수 있도록 사각형의 중간 마우스 단추와 이미지의 왼쪽/오른쪽 MouseDown을 또는 <Image>에 지정하여 직사각형의 크기를 줄이거 나 늘릴 수 있습니다. 나는 을 <Image> 주변으로 끌고, 사각형에 의해 처리되는 왼쪽/오른쪽 클릭을 가지고 있습니다. Left/Right MouseDown을 <Image>으로 처리하려면 어떻게해야합니까? 그러면 자식 및 부모 사각형의 크기를 변경하기위한 코드를 복제 할 필요가 없습니까?C# WPF에서 부모에게 자식의 MouseDown을 버블 링하는 방법은 무엇입니까?

답변

0

여기 유사한 아래 수행 할 수 있습니다 뒤에

<Grid Background="Transparent" StackPanel.MouseDown="StackPanel_MouseDown"> 
    <StackPanel Margin="70" Background="DarkGray" MouseDown="StackPanel_MouseDown"> 
     <TextBlock x:Name="XTextBlock"></TextBlock> 
    </StackPanel> 
</Grid> 

코드 :이 문제를 해결합니다

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void StackPanel_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
     if (sender.GetType().Name.Equals("StackPanel")) 
     { 
      XTextBlock.Text = "I am direct raised from StackPanel."; 
     } 
     else //sender.GetType().Name.Equals("Grid") 
     { 
      XTextBlock.Text += "I am bubble raised from Grid."; 
     } 
    } 
} 

희망.

0

당신은 다음과 PreviewMouseDown를 사용하여 라우트 된 이벤트 터널링 동작을 이용할 수있다 : 뒤에

<Grid Background="Transparent" PreviewMouseDown="Grid_PreviewMouseDown"> 
    <StackPanel Margin="70" Background="DarkGray" Grid.PreviewMouseDown="Grid_PreviewMouseDown"> 
     <TextBlock x:Name="XTextBlock"></TextBlock> 
    </StackPanel> 
</Grid> 

코드 :이 의지 할 수

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void Grid_PreviewMouseDown(object sender, MouseButtonEventArgs e) 
    { 
     if (sender.GetType().Name.Equals("StackPanel")) 
     { 
      XTextBlock.Text += ", I am tunneled raised from StackPanel."; 
     } 
     else //sender.GetType().Name.Equals("Grid") 
     { 
      XTextBlock.Text = "I am direct raised from Grid."; 
     } 
    } 
} 

희망을. 코딩 유지 :)

+0

내 경우에 약간 다른 점은 어떤 마우스 버튼을 눌렀는지에 따라 자식에서 MouseDown을 선택적으로 처리해야한다는 것입니다. 이 문제를 처리 할 수있는 방법이 있습니까? – user3583535

0

어떤 버튼이 눌러 졌는지 확인하려면 MouseButtonEventArgs를 사용할 수 있습니다. 예를

if(e.ChangedButton == MouseButton.Left) 
{ 
    //do something 
} 
0

위해 Thumb 제어를 살펴 보자. 당신은 쉽게 그렇게 9 엄지 손가락의 그리드를 설정할 수 있습니다

+--+-----------+--+ 
| |   | | 
+--+-----------+--+  
| |   | | 
| |   | | 
| |   | | 
| |   | | 
| |   | | 
+--+-----------+--+  
| |   | | 
+--+-----------+--+ 

각 엄지 손가락에 적절한 커서를 할당하고 그 위치에 따라 엄지 손가락 '드래그 이벤트를 처리합니다. 마우스 다운/업/이벤트 직접 처리보다 훨씬 강력합니다.

관련 문제