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

为什么Grid的ColumnDefinition的IsMouseOver触发器无法生效?

问题根因

ColumnDefinition 本质是Grid的布局元数据对象,不属于WPF可视化树中的可交互渲染元素,不会参与鼠标命中测试,因此它的IsMouseOver属性永远不会被触发,你写在它样式里的触发器自然不会生效。

纯XAML实现方案

你不需要额外编写后台逻辑,只需要把触发器移到每一列的实际渲染元素(也就是你代码里的Rectangle)上,通过绑定修改对应列的宽度即可,代码示例如下:

<Window.Resources>
    <Style TargetType="Rectangle" x:Key="AccordionColumnStyle">
        <Setter Property="Tag" Value="1*"/>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Tag" Value="2*"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<Grid Background="Transparent">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="{Binding ElementName=col0Rect, Path=Tag, FallbackValue=1*}"/>
        <ColumnDefinition Width="{Binding ElementName=col1Rect, Path=Tag, FallbackValue=1*}"/>
        <ColumnDefinition Width="{Binding ElementName=col2Rect, Path=Tag, FallbackValue=1*}"/>
        <ColumnDefinition Width="{Binding ElementName=col3Rect, Path=Tag, FallbackValue=1*}"/>
    </Grid.ColumnDefinitions>

    <Rectangle x:Name="col0Rect" Fill="Blue" Grid.Column="0" Style="{StaticResource AccordionColumnStyle}"/>
    <Rectangle x:Name="col1Rect" Fill="Red" Grid.Column="1" Style="{StaticResource AccordionColumnStyle}"/>
    <Rectangle x:Name="col2Rect" Fill="Green" Grid.Column="2" Style="{StaticResource AccordionColumnStyle}"/>
    <Rectangle x:Name="col3Rect" Fill="Yellow" Grid.Column="3" Style="{StaticResource AccordionColumnStyle}"/>
</Grid>

如果你的列里不是Rectangle而是其他内容,只要把触发器套在对应列的最外层容器上即可,逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:15:03