列表框项目模板上的WPF鼠标绑定不一致

时间:2017-04-07 11:28:47

标签: wpf xaml listbox

我有一个列表框,它绑定到一个自定义类型的可观察集合,该集合通过我的数据模板显示每个项目:

<ListBox x:Name="ListBox" Style="{StaticResource CustomListBox}"  ItemsSource="{Binding HandStats}" Height="410" Width="150" >
        <ListBox.ItemTemplate>
            <DataTemplate>
                    <StackPanel Orientation="Vertical">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding HoleCards[0].CardParts.Value}" Margin="2"/>
                            <Image Source="{Binding HoleCards[0].SuitImagePath}" Width="10" Height="10" Margin="2"/>
                            <TextBlock Text="{Binding HoleCards[1].CardParts.Value}" Margin="2"/>
                            <Image Source="{Binding HoleCards[1].SuitImagePath}" Width="10" Height="10" Margin="2"/>
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Runs:" Margin="2"/>
                            <TextBlock Text="{Binding NumberOfRuns}" Margin="2"/>
                            <TextBlock Text="Players:" Margin="2"/>
                            <TextBlock Text="{Binding NumberOfPlayers}" Margin="2"/>
                        </StackPanel>
                        <StackPanel.InputBindings>
                            <MouseBinding Gesture="LeftClick" Command="{Binding Path=DataContext.PopulateReport, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
                                          CommandParameter="{Binding ElementName=ListBox, Path=SelectedItem}"/>
                        </StackPanel.InputBindings>
                    </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>          
</ListBox>

我的列表框图片: http://imgur.com/a/QGz8z

现在理想情况下,当我单击堆栈面板中每个项目的任意位置时,将选择该项目并触发命令。但我的问题是项目选择和命令触发不能正常工作。

只有在文本块之间或文本块右侧的空白区域中单击时,才会选择该项目,但不会触发该命令。该命令仅在我首次选择该项目时触发,然后再次单击其中一个文本块或其中一个图像。

我还是WPF的新手,所以如果我没有多大意义,请提前告知我,谢谢:)

2 个答案:

答案 0 :(得分:1)

因此,我决定使用不同的方法而不是使用输入绑定。我在我的虚拟机中创建了一个属性,并将其绑定到列表中的选定项目。所以现在每次我选择一个新项目(现在都能很好地工作)时,属性会在我的虚拟机中更新。简单!

答案 1 :(得分:0)

尝试将Background的{​​{1}}属性设置为StackPanel

Transparent

如果没有<StackPanel Orientation="Vertical" Background="Transparent"> ... ,则不会按预期引发点击事件。