交互eventtrigger点击列表框

时间:2013-03-31 14:02:42

标签: c# silverlight windows-phone-7 mvvm

我有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事件。

1 个答案:

答案 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。