Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF中切换按钮的代码设计_Wpf_Togglebutton - Fatal编程技术网

WPF中切换按钮的代码设计

WPF中切换按钮的代码设计,wpf,togglebutton,Wpf,Togglebutton,我在WPF中有一个切换按钮,当用户单击它时,它会更改其图标。 这个的最佳设计是什么?单击按钮时,事件处理程序 被称为。然后呢?我应该使用依赖属性吗 谢谢您应该使用样式事件触发器 制作如下样式: <Style TargetType="{x:Type ToggleButton}"> ... </Style> 您可以使用样式和触发器来完成它。我不知道这是否是最好的方法,但这是一种全XAML方法,我喜欢。我最近也是这样做的: <Style x:Key="ZoomTo

我在WPF中有一个切换按钮,当用户单击它时,它会更改其图标。 这个的最佳设计是什么?单击按钮时,事件处理程序 被称为。然后呢?我应该使用依赖属性吗


谢谢

您应该使用样式事件触发器

制作如下样式:

<Style TargetType="{x:Type ToggleButton}">
   ...
</Style>

您可以使用样式和触发器来完成它。我不知道这是否是最好的方法,但这是一种全XAML方法,我喜欢。我最近也是这样做的:

<Style x:Key="ZoomToggleButton" TargetType="{x:Type ToggleButton}">
    <Setter Property="Content">
        <Setter.Value>
            <Image Source="/[my assembly];component/Resources/Images/Zoom_Out.png" Width="15" Height="15" Stretch="None" />
        </Setter.Value>
    </Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ToggleButton}">
                <Border BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true" CornerRadius="4">
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsChecked" Value="true">
                        <Setter Property="Content">
                            <Setter.Value>
                                <Image Source="/[my assembly];component/Resources/Images/Zoom_In.png" Width="15" Height="15" Stretch="None" />
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

您也可以不使用自定义ControlTemplate,通过使用Style.Triggers更改Content属性的值来完成此操作。

可以通过Style Triggers完成:

<Setter Property="Content">
    <Setter.Value>
        <Image Source="UncheckedImage.png" />
    </Setter.Value>
</Setter>
<Style.Triggers>
    <Trigger Property="IsChecked" Value="True">
        <Setter Property="Content">
            <Setter.Value>
                <Image Source="CheckedImage.png" />
            </Setter.Value>
        </Setter>
    </Trigger>
</Style.Triggers>
ContentToggleButton的样式:

用法:

<local:ContentToggleButton>
    <local:ContentToggleButton.UncheckedContent>
        <Image Source="UncheckedImage.png" />
    </local:ContentToggleButton.UncheckedContent>
    <local:ContentToggleButton.CheckedContent>
        <Image Source="CheckedImage.png" />
    </local:ContentToggleButton.CheckedContent>
</local:ContentToggleButton>

这还允许您通过这些属性重新分配图像,而无需覆盖触发器。

我想说的是,使用带有触发器的按钮上的样式来更改图标。。。
<Setter Property="Content" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=UncheckedContent}" />
<Style.Triggers>
    <Trigger Property="IsChecked" Value="True">
        <Setter Property="Content" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=CheckedContent}" />
    </Trigger>
</Style.Triggers>
<local:ContentToggleButton>
    <local:ContentToggleButton.UncheckedContent>
        <Image Source="UncheckedImage.png" />
    </local:ContentToggleButton.UncheckedContent>
    <local:ContentToggleButton.CheckedContent>
        <Image Source="CheckedImage.png" />
    </local:ContentToggleButton.CheckedContent>
</local:ContentToggleButton>