我有一个ListView
, ItemTemplate
包含Image
, TextBox
, ComboBox
, TextBlock
等,当选择任何控件时,应突出显示所选控件,而不是整个ListViewItem
,任何样式都可以。
XAML
<ListView Margin="10" ItemsSource="{Binding TCollection}" SelectedItem="{Binding SelectedTImage}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="150"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Vertical">
<Image Width="70" Height="70" HorizontalAlignment="Center">
<Image.Source>
<BitmapImage DecodePixelWidth="300" DecodePixelHeight="300" UriSource="{Binding TImage}"/>
</Image.Source>
</Image>
<TextBox Text="{Binding text}"/>
<TextBlock Text="Contents"/>
<ComboBox/>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
任何帮助
您需要的是禁用事件冒泡。当然,它会先点击控件,但是单击事件也会弹出到列表项。为了阻止它,你必须在所有控件(按钮等)上放置一个事件处理程序,并在处理程序中设置e.Handled = true
以防止它进入ListViewItem
。
更多信息请参见:disable event-冒泡c# wpf。
如果你根本不希望项目被选中(很难用你的例子来说明),那么你会想要使用ItemsControl
来代替。这将允许您绑定到一个项目集合并显示所有项目,但它没有选中项目的概念。