2017-11-29 11 views
1

성공적으로 한 번 수행 한 후 내 프로그램이 눈금에서 클립 보드로 텍스트 블록을 복사하려고합니다. Clipboard에 데이터를 복사하는 SelectionChanged 이벤트가 있습니다. 편집기로 이동하여 클립 보드에 붙여 넣기 만하면됩니다. 다른 데이터를 클립 보드에 복사하는 것보다. 나는 프로그램으로 다시 전환하고 마우스를 두 번 클릭하여 클립 보드로 데이터를 다시 복사합니다. MouseDown 또는 MouseLeftButtonClick 이벤트를 사용하고 싶습니다. 그러나 작동시키지 못합니다. 이 시나리오에서는 일부 마우스 이벤트 만 작동합니까?MVVM ListBox 마우스 클릭 작동하지 않지만 MouseDoubleClick이

<ListBox> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border BorderThickness="1"> 
       <StackPanel Orientation="Horizontal" ScrollViewer.CanContentScroll="True" Width="auto" > 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*" /> 
          <ColumnDefinition Width="*" /> 
          <ColumnDefinition Width="*" /> 
         </Grid.ColumnDefinitions> 
        </Grid> 
        <TextBlock Width="130" Grid.Column="0" ScrollViewer.CanContentScroll="True" x:Name="TextSelected" Text="{Binding Description}" TextWrapping="Wrap" Margin="5,0,10,0" HorizontalAlignment="Stretch" /> 
        <TextBlock Width="150" Grid.Column="1" ScrollViewer.CanContentScroll="True" x:Name="TextCommand" Text="{Binding Command}" Margin="0,0,10,0" TextWrapping="Wrap" HorizontalAlignment="Stretch" /> 
        <TextBlock Width="200" Grid.Column="2" ScrollViewer.CanContentScroll="True" x:Name="TextLocation" Text="{Binding Location}" Margin="0,0,10,0" TextWrapping="Wrap" HorizontalAlignment="Stretch" /> 
       </StackPanel> 
      </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="MouseDoubleClick"> 
      <i:InvokeCommandAction Command="{Binding AddItemBtn}" CommandParameter="{Binding ElementName=AddItemList2,Path=SelectedItem}" /> 
     </i:EventTrigger> 

     <i:EventTrigger EventName="SelectionChanged"> 
      <i:InvokeCommandAction Command="{Binding AddItemBtn}" CommandParameter="{Binding ElementName=AddItemList2,Path=SelectedItem}" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</ListBox> 

답변

1

당신은 PreviewMouseDown 또는 PreviewMouseLeftButtonDown 대신 캡처합니다. 예를 들어

:

<i:EventTrigger EventName="PreviewMouseDown"> 
    <i:InvokeCommandAction Command="{Binding PreviewMouseDownCommand}" CommandParameter="{Binding ElementName=AddItemList2,Path=SelectedItem}" /> 
</i:EventTrigger> 

사람들은 이미 ListBoxItem 자체에 의해 처리되는 ListBoxItem에 의해 제기되는 버블 링 이벤트이기 때문에 예상대로 MouseDownMouseLeftButtonDown이 작동하지 않는 이유는. 응용 프로그램에서

, 그냥

PreviewMouseDownPreviewMouseLeftButtonDown가 먼저 여행 루트 요소를 호출 터널링 이벤트입니다 그것을 제기 된 객체에 버블 링 라우트 된 이벤트를 처리하는 것은 매우 일반적입니다 자식 요소들을 통해. 보통 UserControl 또는 Window의 루트 요소이므로 DataContext에 이벤트를 처리 할 수있는 기회를 제공합니다.

당신은 터널링에 대한 자세한 내용을보실 수 있습니다/여기에 이벤트를 버블 링 (여기 찍은 위의 인용 성명) : https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/routed-events-overview

+0

감사합니다, 좋은 일했다. 위의 링크를 읽습니다. – coolercargo