我有以下代码,它以行和列的形式填充我的用户控件。正在填充的用户控件包含按钮、链接、文本框等。当在特定行/列中的特定用户控件上按下某个按钮时,我需要知道该按钮是针对哪个用户控件按下的。以下是在行和列中填充用户控件的XAML
<ItemsControl ItemsSource="{Binding Templates}" Width="{Binding GridWidth}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="{Binding NumColumns}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Column" Value="{Binding ColumnIndex}" />
<Setter Property="Grid.Row" Value="{Binding RowIndex}" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
</ItemsControl>
模板基本上是一个用户控件的集合,这些控件被填充到行/列中。我最好在ViewModel中完成这个操作,但是现在在代码后面的解决方案也可以工作。
3条答案
按热度按时间yhxst69z1#
ItemsControl
无法选择项目,只能显示集合。只有Selector或它的一个子代可以选择项目。对于您的场景,我认为ListView和GridView是合适的。当用户单击行中的控件时,事件将冒泡到
ListView
,并且该项将被选中。您可以覆盖默认样式,这样它就不会显示为选中的行:WPF ListView turn off selection。mbskvtky2#
您可以使用
ListView
,并添加一个SelectionChanged
事件,然后实现一个函数来验证ListView.SelectedItem
,就像验证DataGrid
一样bwntbbo33#
我有一个解决方案给你...一个行为:
然后按如下方式进行绑定: