2012-06-28 3 views
1

을 검색 선택하지 않는 나는 다음과 같은 목록 상자가 : 선택된 항목은 내가 라디오 버튼을 선택하면 변경으로목록 상자는 항목

<ListBox ItemsSource="{Binding AvailableTemplates}" Style="{DynamicResource SearchListBoxStyle}" SelectedItem="{Binding SelectedTemplate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <RadioButton Content="{Binding}" GroupName="group" /> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

이 감지하지 않습니다. 목록 상자 행의 라디오 버튼 아래를 클릭하면 검색됩니다. 라디오 버튼을 클릭 할 때 선택한 항목을 감지하도록 수정하는 방법이 있습니까?

답변

8

당신은 단지 RadioButton.IsCheckedListBoxItem.IsSelected와 동기화 할 경우 사용할 수있는 항목은 키보드를 얻을 때마다 당신이 IsSelected을 설정하는 Trigger을 사용할 수 있습니다, 귀하의 항목을 동기화하지 않으

<RadioButton Content="{Binding}" GroupName="group" 
      IsChecked="{Binding Path=IsSelected, RelativeSource={ 
       RelativeSource AncestorType={x:Type ListBoxItem}},Mode=TwoWay}"/> 

바인딩 이것은 단지 한이

<Style TargetType="ListBoxItem"> 
    <Style.Triggers> 
    <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
     <Setter Property="IsSelected" Value="True" /> 
    </Trigger> 
    </Style.Triggers> 
</Style> 

을 키보드 포커스가 그리고 당신이 원하는 경우에 관계없이 요소가 여전히 keyboar이있는 경우의 선택으로 선택 항목을 유지 하겠지만, 초점 초점 여부, false로 ListBoxItem.IsHitTestVisible을 설정해보십시오

<Style TargetType="{x:Type ListBoxItem}"> 
    <EventSetter Event="PreviewGotKeyboardFocus" Handler="SelectCurrentItem"/> 
</Style> 
protected void SelectCurrentItem(object sender, KeyboardFocusChangedEventArgs e) 
{ 
    ListBoxItem item = (ListBoxItem)sender; 
    item.IsSelected = true; 
} 
+0

고마워요,이게 내가 찾고있는 것입니다. 좋은 대답! – soaloa

1
당신은 실수 할 수 없습니다

: listBox.SelectedItem 및

그들은 완전히 다른 것들

을 radioButton.IsChecked는 의 selectedItem은 라디오 버튼이 ListBoxItem의 내에는 ListBoxItem의라고합니다.

IsChecked (RadioButton) 속성의 바인딩을 만들어야합니다.

+0

나는 동의하고, 자주 이런 실수를하는 것을 본다. – Xcalibur37

1

뒤에 약간의 코드를 사용할 필요가 D (당신은 XAML에서이 작업을 수행 할 수 있음). 초등 선택 문제를 해결했습니다. 내 문제는 ListBox 라인에서 공백을 클릭했지만 사용자 정의 컨텐츠를 클릭하지 않은 경우에만 선택 사항이 작동한다는 것입니다.