2011-10-12 3 views
1

내가 가지고있는 ListViewItem에 대해 다음 XAML/컨트롤 템플릿 :의 ListView은 마우스 오른쪽 버튼으로 클릭 (필요 왼쪽 클릭)에 인 selectionchanged 던질 수/

<Window.Resources> 
    <ControlTemplate x:Key="ItemTemplate" TargetType="ListViewItem"> 
     <Border BorderThickness="{TemplateBinding Border.BorderThickness}" Padding="0,5,0,5" BorderBrush="{TemplateBinding Border.BorderBrush}" 
       Background="{TemplateBinding Panel.Background}" SnapsToDevicePixels="True"> 
      <ContentPresenter Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" 
           HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}" 
           SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" /> 
     </Border> 
    </ControlTemplate> 

    <Style TargetType="ListViewItem"> 
     <Setter Property="Template" Value="{StaticResource ItemTemplate}" /> 
    </Style> 

    <DataTemplate x:Key="ItemDataTemplate"> 
     <RadioButton 
     x:Name="radiobutton" GroupName="LeGroup" 
     Content="{Binding Path=Name}" Checked="radiobutton_Checked" /> 
    </DataTemplate> 
</Window.Resources> 

을 그리고 나는 해고하기 위해 인 selectionchanged을 설정하려고하면 마우스 오른쪽 버튼을 클릭하여 라디오 버튼을 선택하면 시작됩니다. 나는 그것이 정상적인 왼쪽 클릭 일 때 발사 할 필요가있다.

<ListView x:Name="radioListView" SelectionMode="Single" ItemsSource="{Binding}" ItemTemplate="{StaticResource ItemDataTemplate}" SelectionChanged="radioListView_SelectionChanged" Loaded="radioListView_Loaded"></ListView> 

마우스 오른쪽 버튼으로 선택 변경 이벤트를 수행하는 것과 관련된 내용을 찾을 수없는 것 같습니다. 표준은 왼쪽 클릭입니다.

가 사전에 감사합니다 :)

편집 :

은 그래서 인 selectionchanged 이벤트가 발생 때 내가 왼쪽 클릭에 라디오 버튼 (및 관련 텍스트)의 바깥 클릭 것으로 나타났습니다. 마치 라디오 버튼이리스트 뷰와 독립적으로 작동하는 것과 같습니다. SelectionChanged 이벤트는 라디오 버튼 요소를 마우스 오른쪽 단추로 INSIDE하면 시작됩니다. 이상한, 아직도 그것을 파악하려고 노력.

답변

0

왼쪽 마우스 버튼이 작동하지 않는 이유는 모르겠지만 여기에 RadioButtons를 사용하여 ListBox를 표시하는 데 사용하는 스타일이 있습니다. 내가 정규의 ListView 선택 동작은 LeftMouseClick를 표시하는 것을 추측 것, 당신의 문제를 추측해야한다면 그것은

<ListBox ItemsSource="{Binding MyItems}" 
     Style="{StaticResource ListBoxAsRadioButtonsStyle}" /> 

처럼 사용

<Style x:Key="ListBoxAsRadioButtonsStyle" TargetType="{x:Type ListBox}"> 
    <Setter Property="BorderBrush" Value="Transparent"/> 
    <Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Cycle" /> 
    <Setter Property="ItemContainerStyle"> 
     <Setter.Value> 
      <Style TargetType="{x:Type ListBoxItem}" > 
       <Setter Property="Margin" Value="2, 2, 2, 0" /> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate> 
          <Border Background="Transparent"> 
           <RadioButton IsHitTestVisible="False" Focusable="false" 
              Content="{TemplateBinding ContentPresenter.Content}" 
              IsChecked="{Binding Path=IsSelected,RelativeSource={RelativeSource TemplatedParent},Mode=TwoWay}"/> 
          </Border> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </Setter.Value> 
    </Setter> 
</Style> 

를 클릭 모두 오른쪽 및 왼쪽 마우스로 잘 작동 이벤트를 클릭하면 처리 된 이벤트가

0

글쎄 그 이상한! 마우스 오른쪽 버튼으로 선택이 수행됩니까 ???

나는 당신이 사건없는 접근을하는 것입니다 제안 할 수 있습니다 모든 ...

당신은 등 또한

을 selectedItem가/SelectedValue 속성을 결합하여 MVVM 패턴을 사용할 수 있습니다 당신은에있는 ListView의 단일 선택 모드를 활용할 수 자동으로 "그룹화"라디오 버튼을 클릭하면 하나만 선택됩니다.

예 : 라디오 버튼의 IsChecked은 조상 ListViewItem의 IsSelected 속성에 양방향으로 바인딩됩니다. 이렇게하면 라디오 버튼이 선택되면 자동으로 해당 목록보기 행이 선택되고 SelectedItem \ Value 바인딩이 자동으로 실행됩니다. ListView의 단일 선택 모드에서 다음 라디오 단추를 클릭하면 이전 행이 자동으로 선택 취소됩니다.