WPF - 更改复选框选中标记以图像(或隐藏)

时间:2014-02-06 21:13:44

标签: wpf image checkbox hide

有人知道是否有一种简单的方法来替换图像复选框选中标记?

我有两个用于“已选中”和“未选中”复选框状态的图像。我不知道如何使用它们而不是勾选标记。

我还尝试用StackPanel替换内容,并将Image和TextBlock放在里面。图像通过触发切换。它工作正常,但我不知道如何删除复选标记图标。

我google了很多,发现了大量XAML(BulletDecorator等)的复杂解决方案。我个人不喜欢让我的生活复杂化,我相信有一个更简单的解决方案。

Checkbox to change

1 个答案:

答案 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}},它应该有用。