2014-04-01 2 views
10

현재 다른 WPF 투쟁, 즉 mouseEvents와 싸우고 있습니다. 기본적으로 매우 간단한 컨트롤을 가지고 있습니다 (Border에는 Grid이 포함되어 있습니다. 그 중 일부는 TextBlocks입니다). 간단한 동작을 얻으려고합니다 : 두 번 클릭하면 컨트롤을 편집 모드로 전환해야합니다 (TextBlocks은 실제로 동일한 데이터에 바인딩 된 TextBoxes을 숨 깁니다.)WPF MouseDown 이벤트가 컨트롤의 모든 곳에서 실행되지 않습니다.

아직 까진 고민 중입니다. MouseDoubleClick 내가 (TextBlock의을 클릭, 등) 컨트롤을 클릭하면 바로 발사 내 UserControl에 연결. 내가 TextBlocks 사이의 빈 공간을 클릭하면, 아무것도. 트리거되지 않습니다조차 MouseDown.

을 내가 그것을 어떻게 만들 수 모든 마우스 클릭을 잡으려고 노력합니까? BorderMouseDown 이벤트를 연결하면 테두리의 모든 클릭을 잡아야한다고 생각했지만 ... 클릭 수를 포착하지 못했습니다. 국경의 빈 부분에. 여기

당신이 그것을 실행하는 내가 만든 몇 초안 코드 :

XAML :

<StackPanel Orientation="Vertical"> 
    <Border Height="400" Width="400" HorizontalAlignment="Center" VerticalAlignment="Center" BorderBrush="Black" BorderThickness="2" 
     MouseDown="Border_MouseDown" MouseUp="Border_mouseUp"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="*" /> 
       <RowDefinition Height="*" /> 
       <RowDefinition Height="*" /> 
      </Grid.RowDefinitions> 

      <TextBlock Text="BLUFF" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
      <TextBlock Text="BLUFF" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
      <TextBlock Text="BLUFF" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
      <TextBlock Text="BLUFF" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
      <TextBlock Text="BLUFF" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
      <TextBlock Text="BLUFF" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
      <TextBlock Text="BLUFF" Grid.Column="2" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
      <TextBlock Text="BLUFF" Grid.Column="2" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
      <TextBlock Text="BLUFF" Grid.Column="2" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
     </Grid> 

    </Border> 

    <TextBlock Height="100" Width="300" HorizontalAlignment="Center" TextAlignment="Center" x:Name="thetext" Visibility="Collapsed" 
       Foreground="White" Background="Red" Text="CLICKED!" /> 
</StackPanel> 

코드 숨김

이제
private void Border_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
     thetext.Visibility = Visibility.Visible; 
    } 

    private void Border_mouseUp(object sender, MouseButtonEventArgs e) 
    { 
     thetext.Visibility = Visibility.Collapsed; 
    } 

하면 "허풍"중 하나를 클릭하십시오 텍스트 : "CLICKED"텍스트가 나타납니다. TextBlock 사이에서 다른 곳을 클릭 해보십시오. 아무 일도 일어나지 않습니다.

감사합니다. 트릭을 할해야

답변

25
<StackPanel Background="Transparent" ... 

또는

<Border Background="Transparent" ... 

...

이것은 마우스 클릭에 대한 그리드, 투명 그러나 볼 수 있습니다.

자세한 내용은 here 양식을 참조하십시오.

PreviewXXX -Event를 사용해야하는 몇 가지 다른 상황이 있습니다. 이는 자식 요소가 이벤트를 "스왈로우"하는 경우이지만 위의 경우 사용자가 찾고있는 것입니다.

+4

음. 그건 예상치 못하게 쉽고 바보 같았습니다. 빠른 답변 주셔서 감사합니다. 나는 항상 기본 배경색이 투명하다고 생각했습니다. 고마워요! 언젠가 WPF와의 싸움이 시작됩니다. – Damascus

관련 문제