我有listboxitem的模板。模板包含复选框。总是,当我检查它时,Tap事件被触发。但Tap只有在我选择项目时才会触发,当我选中复选框时则不会触发。我尝试过使用SelctionChanged事件,这是正常的。但我想因为mvvm模式而使用Interactions。这是我的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事件。
答案 0 :(得分:0)
听起来你只需要停止处理鼠标/手势事件的复选框。
只需在复选框上将IsHitTestVisible设置为False。
<CheckBox x:Name="cbxSelected"
Grid.Column="0"
Grid.RowSpan="2"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
IsChecked="{Binding IsSelected, Mode=TwoWay}"
IsHitTestVisible="False"/>
击> 我现在意识到我误解了你的问题...
如果您希望能够在不导致选择ListBoxItem的情况下选中复选框,则应该从CheckBox处理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。