我使用ListView
来显示Button
的列表。使用StackPanel
或WrapPanel
作为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>
答案 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
我强烈建议您使用ItemsPanel
和Canvas.Left
属性来定位项容器。您通常会将它们绑定到数据项类型的属性,例如Canvas.Top
和x0
:
y0