我编写了自己的复选框ContentControl,以便更好地进行设计控制。
场景如下所示:
我得到了一个带有自定义模板列表项的列表框,而该列表项又具有文本项和我的自定义复选框。
通缉行为:
- 单击"列表项更改"页可查看该项的详细视图。
- 单击该复选框仅切换其上的复选标记,不会触发页面更改。
实际行为:
您可能会猜到,当单击我的复选框时,页面更改事件仍然被触发。
我是如何实现的:
我的复选框有一个网格,其中包含一个矩形和一个图标。我将 Tap 事件绑定到网格,以切换 IsChecked 状态。(网格对象没有单击事件)。
是因为我没有使用点击事件吗?如果是这样,我的 ContentControl 必须为其实现哪个接口?或者默认复选框(按钮?)控件如何管理它?
感谢您的帮助。
我编写了自己的复选框 ContentControl 以获得更好的设计控制
如果您觉得确实必须创建自己的复选框,则控件应扩展 ToggleButton。这将为您提供所需的行为。如果标准复选框对您不起作用,我会感到非常惊讶。您可以更改复选框的样式以执行所需的任何操作,更改为所需的任何操作。我正在做你想做的事情,而且效果很好。我在ListBox
的ItemTemplate
内使用复选框。我已经设置了复选框的样式,使其具有与常规复选框不同的外观。这是我的列表框示例
<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>