2013-07-09 39 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是否被调用?只需添加事件作为方法和断点。 – Master117

回答

0

根本原因是另一个开发人员实现了一些代码,这些代码改变了预览鼠标向下事件的焦点。此代码已更新为具有所需的行为而无需修改焦点,组合框现在按预期工作。诊断所需的信息不在原始问题中(无法公布所有...)。

1

我真的不能告诉什么是从你的代码错不过,我强烈建议你使用史努比调试你的控件(http://snoopwpf.codeplex.com/

通过按住Ctrl + Shift的鼠标指向哪里你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

Snoop显示相应的ComboItem为焦点。 – PatrickV

+0

我已经更新了我的答案。 – Aybe

相关问题