我的ListBox绑定了ObservableCollection,且在Xaml里面定义了ItemTemplate,Template由一些控件比如ComboBox组成。现在的问题是,我需要选中Item,但是鼠标点击Item里面的控件没法选中... 我的ListBox绑定了ObservableCollection,且在Xaml里面定义了ItemTemplate,Template由一些控件比如ComboBox组成。
现在的问题是,我需要选中Item,但是鼠标点击Item里面的控件没法选中,只有点击Item边缘的空隙才能选中。这样操作不是很方便。如何达到鼠标选择Item的任何范围都能选中?最好是在Xaml里面实现。
<ListView Name="list_tools" Tag="tools" BorderThickness="0" Background="AliceBlue" SelectionChanged="list_tools_SelectionChanged">
                                            <ListView.ItemTemplate>
                                                <HierarchicalDataTemplate DataType="{x:Type EntityLocal:ModelEntity}" >
                                                    <StackPanel Orientation="Horizontal">
                                                        <Image VerticalAlignment="Center" Source="{Binding Path=Icon}" Width="16" Height="16" Margin="0,0,2,2"></Image>
                                                        <TextBlock VerticalAlignment="Center" Text="{Binding Name}"></TextBlock>
                                                        <StackPanel.ToolTip>
                                                            <TextBlock VerticalAlignment="Center" Text="{Binding ToolTip}" TextWrapping="Wrap" MaxWidth="200" ></TextBlock>
                                                        </StackPanel.ToolTip>
                                                    </StackPanel>
                                                </HierarchicalDataTemplate>
                                            </ListView.ItemTemplate>
                                        </ListView>

我也是第一次用WPF做东西,我这个list是图标跟文字组成的,可以正常选中,没遇到你的问题

点Combobox不能选中整个Item,我想要的效果是点击Item的任何部分都能选中整个Item。就拿Winform来说,如果窗体上有个textbox,我在textbox里面按下键的时候,默认不会引发Form的keydown事件,但是如果我把Form.KeyPreview设置为true,则能引发。上述ListBox有没有类似的属性或者机制?
明白你意思了。我的解决方案是在Combobox中添加获取焦点的事件,通过事件找到combobox所对应的数据实体。然后再找到对应的listboxItem并对其进行IsSelected=true的操作。说起来比较复杂,上代码比较明了。
private void ComboBox_GotFocus(object sender, RoutedEventArgs e)
{
ComboBox cb = sender as ComboBox;
var selectedObject = cb.DataContext;
ListBoxItem selectedItem = listbox.ItemContainerGenerator.ContainerFromItem(selectedObject) as ListBoxItem;
if(selectedItem != null)
selectedItem.IsSelected =true;
}
谢了,但是我想在xaml里面实现,上面刚刚点错了,采纳了一个打广告的。
反正思路就是这样子的了。如果要在xaml实现的话。我的思路是listboxItem跟combobox的HasFocusd属性模板绑定了要。这只是思路,实现起来可能会有一些问题的。