2014-02-06 33 views
4

任何人都可以知道是否有一种简单的方法可以用图像替换复选框复选标记吗?WPF - 将复选框选中标记更改为图像(或隐藏)

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

我也尝试用StackPanel替换内容,并将Image和TextBlock放入其中。图像由触发器切换。它工作正常,但我不知道如何删除复选标记图标。

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

Checkbox to change

+0

你想要其他的东西,然后在CheckBox.IsChecked中的V标志? –

+0

是的。如您所见,复选框旁边放置了另一个自定义图标。我有一个复选框的自定义图像,当它被选中并取消选中时,我想用它们替换标准V标志。 – LukTar

+0

我只是要睡着了,你需要的是改变控制模板,因为没有CheckMarkStyle属性暴露 在那里你删除航空:ChormeBullet,并把你自己的元素 一个路径,或用笔刷形状,提醒我这个tommrow,我会告诉你一个例子。 –

回答

14

可以简单地为Checkbox,在其中显示您的图片,而不是默认打勾定义自己ControlTemplate。您可以在MSDN上的CheckBox Styles and Templates页面找到的默认ControlTemplate

当定义自己的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这个词,它应该可以工作。

+0

适合我。优雅简单的解决方案。谢谢谢里登。 – LukTar