有人知道是否有一种简单的方法来替换图像复选框选中标记?
我有两个用于“已选中”和“未选中”复选框状态的图像。我不知道如何使用它们而不是勾选标记。
我还尝试用StackPanel替换内容,并将Image和TextBlock放在里面。图像通过触发切换。它工作正常,但我不知道如何删除复选标记图标。
我google了很多,发现了大量XAML(BulletDecorator等)的复杂解决方案。我个人不喜欢让我的生活复杂化,我相信有一个更简单的解决方案。
答案 0 :(得分:14)
您 可以为ControlTemplate
定义您自己的Checkbox
,您可以在其中显示图片而不是默认刻度。您可以在MSDN上的CheckBox Styles and Templates页面中找到ControlTemplate
的默认Checkbox
。
在定义自己的ControlTemplate
时,从默认值开始通常是个好主意。在您的项目中工作,然后您可以根据自己的喜好开始调整它。这样,它应该保留用户习惯的所有默认行为Checkbox
。
但这是我们在这里谈论的WPF ......通过一点横向思考,很容易使几个控件看起来像其他控件。例如,这是一个ToggleButton
,其中包含自定义ControlTemplate
,使其看起来像Checkbox
,但Image
会在您点击它而非正常时发生变化刻度线:
<ToggleButton Content="I'm An Image CheckBox Label" Foreground="Black">
<ToggleButton.Template>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<StackPanel Orientation="Horizontal">
<Image>
<Image.Style>
<Style>
<Setter Property="Image.Source"
Value="/AppName;component/Images/Image1.jpg" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked,
RelativeSource={RelativeSource AncestorType=
{x:Type ToggleButton}}}" Value="True">
<Setter Property="Image.Source"
Value="/AppName;component/Images/Image2.jpg" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<ContentPresenter Content="{TemplateBinding Content}"
Margin="5,0,0,0" />
</StackPanel>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>
也可以很容易地将其转换为CheckBox
,因为它也使用IsChecked
属性...您甚至可能只是将单词ToggleButton
的所有实例替换为Checkbox
单词{{1}},它应该有用。