WPF-Image ToggleButton

ImageToggleButton

方法一

直接在Xaml中使用Style与ControlTemplate,并在ControlTemplate中建一个Image 为Unchecked的图片,在ControlTemplate中再建一个Trigger,当IsChecked为Ture时,负责切换图片
<ToggleButton            x:Name="ToogleBtn"            Margin="150 0 0 0"            Width="44"            Height="44">            <ToggleButton.Style>                <Style TargetType="ToggleButton">                    <Setter Property="Template">                        <Setter.Value>                            <ControlTemplate TargetType="ToggleButton">                                <Image x:Name="img" Source="Image/Car-Loan.png" />                                <ControlTemplate.Triggers>                                    <Trigger Property="IsChecked" Value="True">                                        <Setter TargetName="img" Property="Source" Value="Image/Car-Loan-WF.png" />                                    </Trigger>                                </ControlTemplate.Triggers>                            </ControlTemplate>                        </Setter.Value>                    </Setter>                </Style>            </ToggleButton.Style>        </ToggleButton>

方法二

但上述的使用方式,若有多个ToggleButton,且每个都不同图片时,会造成Xaml较长,因此改善其作法

建一Custom Control
建立ImageToggleButton的 CheckedImageSource 与UncheckedImageSource的 Property
public ImageSource CheckedImageSource        {            get => (ImageSource)GetValue(CheckedImageSourceProperty);            set => SetValue(CheckedImageSourceProperty, value);        }        public static readonly DependencyProperty CheckedImageSourceProperty =            DependencyProperty.Register("CheckedImageSource", typeof(ImageSource), typeof(ImageToggleButton), new PropertyMetadata(null));        public ImageSource UncheckedImageSource        {            get => (ImageSource)GetValue(UncheckedImageSourceProperty);            set => SetValue(UncheckedImageSourceProperty, value);        }        public static readonly DependencyProperty UncheckedImageSourceProperty =            DependencyProperty.Register("UncheckedImageSource", typeof(ImageSource), typeof(ImageToggleButton), new PropertyMetadata(null));
在建立Custom Control时,会在Theme资料夹中产生一个Generic.xaml,修改里面的ImageToggleButton Style
<Style TargetType="{x:Type local:ImageToggleButton}">        <Setter Property="Height" Value="50" />        <Setter Property="Width" Value="50" />        <Setter Property="Template">            <Setter.Value>                <ControlTemplate TargetType="{x:Type local:ImageToggleButton}">                    <Image x:Name="img" Source="{TemplateBinding UncheckedImageSource}" />                    <ControlTemplate.Triggers>                        <Trigger Property="IsChecked" Value="True">                            <Setter TargetName="img" Property="Source" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=CheckedImageSource}" />                        </Trigger>                    </ControlTemplate.Triggers>                </ControlTemplate>            </Setter.Value>        </Setter>    </Style>
最后就可以使用这个ImageToggleButton了
<local:ImageToggleButton CheckedImageSource="Image/Car-Loan.png" UncheckedImageSource="Image/Align-Right.png" />

https://github.com/houzhiwei/WPFImageToggleButton.git


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章