2013-07-09 1 views
1

런타임시 예상대로 작동하지 않는 콤보 상자가 있습니다. 마우스를 사용하여 드롭 다운 창을 확장 할 수 있지만 항목을 클릭해도 선택하지 않는 것 같습니다. 드롭 다운은 사라지지만 선택 사항은 변경되지 않습니다. 동일한 컨트롤이 키보드를 사용하여 예상대로 작동하는 것 같습니다. 위쪽/아래쪽 화살표로 선택을 변경합니다. 화살표 키를 사용하여 선택하고 입력하여 값을 변경하도록 선택할 수 있습니다.콤보 상자 항목 선택 키보드가 있지만 마우스가 아닌 경우

클릭하여 항목을 선택하려면 어떻게해야합니까?

<DataTemplate DataType="{x:Type myType}"> 
    <Border ...> 
     <Grid x:Name="upperLayout"> 
     <Grid x:Name="lowerLayout"> 
      <ComboBox x:Name="combo" 
      Grid.Column="2" 
      ItemsSource="{Binding Things}" 
      SelectedItem="{Binding SelectedThing}" 
      > 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
       <TextBlock Text="{Binding Name}" /> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
      </ComboBox> 
     </Grid> 
     </Grid> 
    </Border> 
    </DataTemplate> 
+1

'SelectedItem'을 변경할 때'SelectedThing'이 변경 되나요? – PoweredByOrange

+0

는 아마도 관련 http://stackoverflow.com/questions/1342200/wpf-combobox-not-responding-to-mouse – keyboardP

+0

당신은 인 selectionchanged가 호출됩니다 있는지 확인하려고 했습니까? 메소드를 Event로 추가하고 중단 점을 추가하기 만하면됩니다. – Master117

답변

0

근본 원인은 다른 개발자 이벤트 아래 미리보기 마우스의 초점을 변경하는 코드를 구현 한 것이 었습니다. 이 코드는 포커스를 수정하지 않고 원하는 동작을하도록 업데이트되었으며 이제 콤보 상자가 예상대로 작동합니다. 진단에 필요한 정보는 원래의 질문에 없었습니다 (모두를 게시 할 수는 없습니다 ...).

1

난 정말 당신이 Ctrl 키 + Shift를 누른 채 마우스 곳을 가리키는하여 컨트롤 (http://snoopwpf.codeplex.com/)

을 디버깅 스눕를 사용하는 것이 좋습니다 강하게 것, 그러나 코드에서 문제가 있는지 알 수 없습니다 당신은 ComboBox가 당신의 콤보 상자 대신에 누가 포커스를 가지고 있는지 즉시 알 수있는 입력을 받아 들여야합니다.

enter image description here

당신은 당신의 템플릿을 디버깅 정말, 당신의 가장 친한 친구를 속성 값을 변경할 수 있습니다!

편집

난 두려워하지만 코드가 당신이 나를 위해 작품을 게시 한 :

<Window x:Class="WpfApplication6.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:wpfApplication6="clr-namespace:WpfApplication6" 
     Title="MainWindow" 
     Width="525" 
     Height="350"> 
    <Window.Resources> 
     <DataTemplate x:Key="myTemplate" DataType="{x:Type wpfApplication6:MyType}"> 
      <Border> 
       <Grid x:Name="upperLayout"> 
        <Grid x:Name="lowerLayout"> 
         <ComboBox x:Name="combo" 
            Grid.Column="0" 
            ItemsSource="{Binding Path=Things}" 
            SelectedItem="{Binding Path=SelectedThing}"> 
          <ComboBox.ItemTemplate> 
           <DataTemplate DataType="{x:Type wpfApplication6:MyThing}"> 
            <TextBlock Text="{Binding Name}" /> 
           </DataTemplate> 
          </ComboBox.ItemTemplate> 
         </ComboBox> 
        </Grid> 
       </Grid> 
      </Border> 
     </DataTemplate> 
    </Window.Resources> 
    <Grid x:Name="grid"> 
     <ContentControl x:Name="content" ContentTemplate="{StaticResource myTemplate}" Margin="58,79,71,40" /> 
    </Grid> 
</Window> 
public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     Loaded += MainWindow_Loaded; 
    } 

    private void MainWindow_Loaded(object sender, RoutedEventArgs e) 
    { 
     MyType type = new MyType() 
      { 
       Things = new List<MyThing>() {new MyThing() {Name = "aaa"}, new MyThing() {Name = "bbb"}} 
      }; 
     content.Content = type; 
    } 
} 

public class MyType 
{ 
    public MyThing SelectedThing { get; set; } 
    public List<MyThing> Things { get; set; } 
} 

public class MyThing 
{ 
    public string Name { get; set; } 
} 

어쩌면 뭔가는없는 키 스타일로 나사 또는 뭐든지, 문제가있는 코드를 더 게시하십시오.

+0

스눕은 포커스가있는 것으로 적절한 ComboItem을 표시합니다. – PatrickV

+0

답변을 업데이트했습니다. – Aybe