WP7:单击子控件时如何阻止网格上的单击事件



我编写了自己的复选框ContentControl,以便更好地进行设计控制。

场景如下所示:

我得到了一个带有自定义模板列表项的列表框,而该列表项又具有文本项和我的自定义复选框。

通缉行为:

  • 单击"列表项更改"页可查看该项的详细视图。
  • 单击该复选框仅切换其上的复选标记,不会触发页面更改。

实际行为:

您可能会猜到,当单击我的复选框时,页面更改事件仍然被触发。

我是如何实现的:

我的复选框有一个网格,其中包含一个矩形和一个图标。我将 Tap 事件绑定到网格,以切换 IsChecked 状态。(网格对象没有单击事件)。

是因为我没有使用点击事件吗?如果是这样,我的 ContentControl 必须为其实现哪个接口?或者默认复选框(按钮?)控件如何管理它?

感谢您的帮助。

我编写了自己的复选框 ContentControl 以获得更好的设计控制

如果您觉得确实必须创建自己的复选框,则控件应扩展 ToggleButton。这将为您提供所需的行为。如果标准复选框对您不起作用,我会感到非常惊讶。您可以更改复选框的样式以执行所需的任何操作,更改为所需的任何操作。我正在做你想做的事情,而且效果很好。我在ListBoxItemTemplate内使用复选框。我已经设置了复选框的样式,使其具有与常规复选框不同的外观。这是我的列表框示例

<ListBox ItemsSource="{Binding Items}"
         SelectionChanged="Stations_SelectionChanged"
         toolkit:TiltEffect.IsTiltEnabled="True"
         SelectionMode="Single">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid Margin="0,0,0,17">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="48"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
                <CheckBox IsChecked="{Binding YesOrNo, Mode=TwoWay}" Width="48"
                          Style="{StaticResource MinimalCheckBoxStyle}"/>
                <TextBlock Text="{Binding Name}" VerticalAlignment="Center"
                   Style="{StaticResource PhoneTextExtraLargeStyle}"
                           Grid.Column="1"/>
                <TextBlock Text="{Binding OtherProperty}"
                           Style="{StaticResource PhoneTextSubtleStyle}"
                           Grid.Column="1" Grid.Row="1"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

最新更新