You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中为Expander设置切换式自定义图标问题求助

WPF Expander切换状态时更换图标解决方法

要解决Expander切换状态时图标不更换的问题,只需要给模板里的Image控件加个名字,再在IsChecked的Trigger里设置它的图片源就行,具体修改如下:

修改后的完整代码

<Style x:Key="ExpanderDownHeaderStyle" TargetType="{x:Type ToggleButton}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ToggleButton}">
                <Border Padding="{TemplateBinding Padding}">
                    <Grid SnapsToDevicePixels="False">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="19"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <!-- 给Image添加x:Name,方便Trigger定位 -->
                        <Image x:Name="ExpanderIcon" Source="Assets\icons\hide.png"/>
                        <ContentPresenter Grid.Column="1" HorizontalAlignment="Left" Margin="4,0,0,0" RecognizesAccessKey="True" SnapsToDevicePixels="True" VerticalAlignment="Center"/>
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsChecked" Value="true">
                        <!-- 通过Setter修改指定Name的Image的Source属性 -->
                        <Setter TargetName="ExpanderIcon" Property="Source" Value="Assets\icons\show.png"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

关键修改点

  • 给模板内的Image控件添加x:Name="ExpanderIcon",让Trigger能准确找到要修改的元素
  • 在IsChecked=true的Trigger中,用<Setter TargetName="ExpanderIcon" Property="Source" Value="Assets\icons\show.png"/>来切换图片源

这样当Expander展开(ToggleButton的IsChecked为true)时,图标就会自动从hide.png切换成show.png了。

内容的提问来源于stack exchange,提问作者J4ns323

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:32:51