点击列表框
本文关键字:列表 | 更新日期: 2023-09-27 18:06:47
我有listboxitem的模板。模板包含复选框。总是,当我检查它时,Tap事件被触发。但是Tap只有在我选择项目时才会触发,而在我选中复选框时则不会。我试图使用SelctionChanged事件,这是正常工作。但我想使用交互,因为mvvm模式。这是我的xaml代码。
<ListBox x:Name="lstboxDevicePositions" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding DevicePositions}" SelectedIndex="{Binding SelectedIndexDevicePosition, Mode=TwoWay}" SelectedItem="{Binding SelectedDevicePosition, Mode=TwoWay}" >
<ListBox.ItemTemplate>
<DataTemplate>
<Border Background="#709DFF" Margin="1,0,1,2" CornerRadius="2" >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<CheckBox x:Name="cbxSelected" Grid.Column="0" Grid.RowSpan="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" IsChecked="{Binding IsSelected, Mode=TwoWay}" />
<TextBlock x:Name="txtblockBindedAddress" Grid.Column="1" Grid.Row="0" TextWrapping="Wrap" Text="{Binding Address}" />
<TextBlock x:Name="txtblockBindedDate" Grid.Column="1" Grid.Row="1" Text="{Binding Date}" />
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListBox.ItemContainerStyle>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Tap">
<cmd:EventToCommand Command="{Binding ShowDevicePositionCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</ListBox>
编辑
问题是,复选框和列表框有Tap事件。当我点击复选框事件被触发。我想只在点击listboxitem时触发Tap事件。
听起来你只需要停止复选框处理鼠标/手势事件。只需将复选框上的IsHitTestVisible设置为False。
<CheckBox x:Name="cbxSelected"
Grid.Column="0"
Grid.RowSpan="2"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
IsChecked="{Binding IsSelected, Mode=TwoWay}"
IsHitTestVisible="False"/>
罢工我现在意识到我误解了你的问题。
如果您希望能够选中复选框而不导致ListBoxItem被选中,则应该处理复选框中的Tap事件。
<CheckBox x:Name="cbxSelected"
Tap="cbxSelected_Tap"
...
/>
…
private void cbxSelected_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
e.Handled = true;
}
通过设置Handled = true,您将阻止事件被路由到ListBoxItem。