gpt4 book ai didi

c# - 在 WPF 中重用 ToggleButton 样式

转载 作者:行者123 更新时间:2023-12-02 04:33:14 25 4
gpt4 key购买 nike

我有以下 ToggleButton 样式:

<Style x:Key="GraphToggleButtonStyle" TargetType="ToggleButton">
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content">
<Setter.Value>
<Image Source="{StaticResource Graph}" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Content">
<Setter.Value>
<Image Source="{StaticResource Graph_Off}" />
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>

我正在尝试将其重用于我的 ToggleButtons(它是一个列表) - 所以我列表中的每一项都有一个 ToggleButton。问题是,当我单击 ToggleButton 时,未单击的按钮图标消失了。只有我点击的按钮显示所需的图像...我这种风格做错了什么吗?

我的 ToggleButton 实现:

 <ToggleButton Style="{StaticResource GraphToggleButtonStyle}"
ToolTip="{x:Static res:Resources.UseGraphToggle}"
Visibility="{Binding Selected,
Converter={StaticResource BoolToVisibilityConverter}}" />

最佳答案

每当按钮 IsChecked 属性发生更改时,您都不需要将子项(图像)添加到可视化树中。

问题是默认情况下共享样式,除非您设置x:Shared="False"并且其次任何视觉都可以仅添加到一棵可视化树中。如果您在另一个可视化树中添加可视化,它将从先前的可视化树中删除。在你的例子中,视觉是图像控制。

在您的情况下,设置 x:Shared="False" 将会起作用,但这会破坏资源的可重用性功能。因此,我建议不要每次都创建 Image 控件的新实例,而是仅创建一次 Image 控件,并在触发器中更改图像源

<Style x:Key="GraphToggleButtonStyle" TargetType="ToggleButton">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Image x:Name="image"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsChecked,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=ToggleButton}}" Value="True">
<Setter TargetName="image" Property="Source"
Value="{StaticResource Graph}"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsChecked,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=ToggleButton}}" Value="False">
<Setter TargetName="image" Property="Source"
Value="{StaticResource Graph_Off}"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>

关于c# - 在 WPF 中重用 ToggleButton 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22573390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com