我有一个组合框在运行时无法正常工作。我可以用鼠标展开下拉窗口,但点击一个项目似乎并没有选择它。下拉列表消失,但选择没有改变。相同的控件似乎可以使用键盘按预期工作。向上/向下箭头更改选择。我也可以使用箭头键选择和输入选择来更改值。
如何点击选择项目?
<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>
最佳答案
不过,我真的无法判断您的代码有什么问题,我强烈建议您使用 Snoop 来调试您的控件 (http://snoopwpf.codeplex.com/)
通过按住 Ctrl+Shift 并将鼠标指向 ComboBox 应该抓取输入的位置,您会立即发现谁获得了焦点,而不是您的组合框。
您甚至可以更改属性的值,这真的是您调试模板的最佳 helper !
编辑
我很害怕,但你发布的代码对我有用:
<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; }
}
也许是其他原因造成的,例如没有键的样式或其他任何东西,请发布更多您遇到问题的代码。
关于c# - ComboBox 项目选择适用于键盘但不适用于鼠标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17556189/