Canvas中的事件仅适用于最后一个元素

时间:2013-10-17 10:18:34

标签: wpf data-binding

我使用ListView来显示Button的列表。使用StackPanelWrapPanel作为ItemsPanel的{​​{1}}时,一切正常。当我尝试ListView时,只有一个集合中的最后一个按钮正在工作,其他人甚至不会在鼠标悬停在他们上面时更改背景。我可以让它们正常工作吗?

Canvas
代码背后的代码:

<ListView ItemsSource="{Binding collection1}">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas/>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListView.ItemTemplate>
        <DataTemplate>
            <Button Margin="{Binding margin}" Width="40" Height="40" Click=button_click />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

1 个答案:

答案 0 :(得分:1)

问题是您在Margin内使用ListViewItem定位按钮的方式。所有ListViewItems在Canvas中都位于彼此的顶部,只有最顶层的东西才能获得输入事件。

将保证金绑定从ItemTemplate移出ItemContainerStyle,以便设置Margin的{​​{1}}而不是ListViewItem:< / p>

Button

使用<ListView> <ListView.ItemsPanel> <ItemsPanelTemplate> <Canvas/> </ItemsPanelTemplate> </ListView.ItemsPanel> <ListView.ItemContainerStyle> <Style TargetType="ListViewItem"> <Setter Property="Margin" Value="{Binding margin}"/> </Style> </ListView.ItemContainerStyle> <ListView.ItemTemplate> <DataTemplate> <Button Width="40" Height="40" .../> </DataTemplate> </ListView.ItemTemplate> </ListView> 作为Canvas我强烈建议您使用ItemsPanelCanvas.Left属性来定位项容器。您通常会将它们绑定到数据项类型的属性,例如Canvas.Topx0

y0