如何在xaml wpf中用png图像替换默认复选框样式

时间:2016-01-22 08:46:45

标签: c# wpf xaml

如果使用png图像替换默认复选框样式,对于已检查状态和未检查状态。

这是我尝试的但是不符合xaml:

<CheckBox IsChecked="{Binding AirTemperatureGridChecked}">
                    <CheckBox.Background>
                        <Image Source="https://cdn4.iconfinder.com/data/icons/cc_mono_icon_set/blacks/48x48/checkbox_unchecked.png" Width="16" Height="16" />    
                    </CheckBox.Background>                        
                </CheckBox>

我尝试使用此代码,但是内容中的图像不会被替换。

<CheckBox IsChecked="{Binding AirTemperatureGridChecked}">
                    <Image Source="https://cdn4.iconfinder.com/data/icons/cc_mono_icon_set/blacks/48x48/checkbox_unchecked.png" Width="16" Height="16" />
                </CheckBox>

可以替换默认样式吗?

1 个答案:

答案 0 :(得分:1)

在这种特殊情况下,您需要摆弄CheckBox的模板。

<CheckBox IsChecked="{Binding AirTemperatureGridChecked}">
     <CheckBox.Template>
          <ControlTemplate TargetType="{x:Type CheckBox}">
               <Grid>
               <Image x:Name="Foo" Width="16" Height="16" Source="https://cdn4.iconfinder.com/data/icons/cc_mono_icon_set/blacks/48x48/checkbox_unchecked.png" />
               </Grid>
               <ControlTemplate.Triggers>
                    <Trigger Property="IsChecked" Value="False">
                         <Setter TargetName="Foo" Property="Opacity" Value="0.5" />
                    </Trigger>
               </ControlTemplate.Triggers>
          </ControlTemplate>
 </CheckBox.Template>

我从头开始制作这个,只是举例说明如何快速简便地设置自己的模板并运行控件设计。

正如你所看到的,它是由一个网格构成的,里面有你的图像,而下面是一个触发器,可以在未选中时使复选框降低其不透明度。

您可以在该网格中放置任何内容来设计您的复选框,就像使用任何窗口一样,并使用触发器为其提供功能。

另外(由于给每个复选框提供了大量的代码是不合理的)你可以给controltemplate一个关键:

<ControlTemplate x:Key="WhateverYouWantToCallMe" TargetType="{x:Type CheckBox}">
     <!-- Content ect... -->
</ControlTemplate>

将它放在资源字典中,并将其作为复选框的StaticResource调用,如下所示:

<CheckBox Template="{StaticResource WhateverYouWantToCallMe}"/>