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

如何在ToggleButton选中、ComboBox展开时修改ToggleButton的底部边框圆角?

解决方案

你可以通过给ToggleButton内部的Border样式添加数据触发器,绑定ToggleButton的IsChecked属性(已经关联ComboBox的下拉展开状态),动态修改圆角值实现效果,需要修改的代码如下:

1. 修改左侧ToggleButton的资源样式

找到ComboBox模板中第一个PART_EditableTextBox对应的ToggleButton,修改其内部的Border样式,新增展开状态的圆角规则:

<ToggleButton Name="PART_EditableTextBox"            
              Style="{StaticResource MyButton}"                  
              IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
              Padding="5,0,0,0" BorderThickness="0"
              Height="{TemplateBinding Height}">
    <ToggleButton.Resources>
        <Style TargetType="{x:Type Border}">
            <Setter Property="CornerRadius" Value="10 0 0 10"/>
            <!-- 新增触发器,下拉展开时去掉底部圆角 -->
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsChecked, RelativeSource={RelativeSource AncestorType=ToggleButton}}" Value="True">
                    <Setter Property="CornerRadius" Value="10 0 0 0"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ToggleButton.Resources>
</ToggleButton>

2. 修改右侧带箭头的ToggleButton资源样式

同理修改第二个ToggleButton的Border样式:

<ToggleButton Grid.Column="1" Margin="0" Background="#2C2F33"
             Height="{TemplateBinding Height}" Style="{StaticResource MyButton}"
             Focusable="False" BorderThickness="0" 
             IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
             ClickMode="Press">
    <Path Grid.Column="1" 
          HorizontalAlignment="Center"
          VerticalAlignment="Center" 
          Data="M 0 0 L 4 4 L 8 0 Z"
          Fill="LightBlue" />
    <ToggleButton.Resources>
        <Style TargetType="{x:Type Border}">
            <Setter Property="CornerRadius" Value="0 10 10 0"/>
            <!-- 新增触发器,下拉展开时去掉底部圆角 -->
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsChecked, RelativeSource={RelativeSource AncestorType=ToggleButton}}" Value="True">
                    <Setter Property="CornerRadius" Value="0 10 0 0"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ToggleButton.Resources>
</ToggleButton>

3. 修正MyButton样式中空的触发器

你的ToggleButton样式中IsChecked触发器当前没有指定目标和属性,补充完整避免报错:

<Trigger Property="IsChecked" Value="True">
    <Setter TargetName="border" Property="Opacity" Value="0.8" />
</Trigger>

补充说明

修改后下拉展开时两个ToggleButton的底部圆角会自动变为0,和你已经设置为顶部直角的下拉框DropDownBorder(CornerRadius为0 0 7 7)完美衔接。如果出现衔接间隙,可以给Popup控件添加PlacementOffset="0,-1"属性调整位置,消除缝隙。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:45:06