为什么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
相关产品推荐
相关产品推荐

