首页 > 解决方案 > 在 IsMouseOver 上触发内容更改

问题描述

我正在尝试将on属性集更改Content为. 这是稍微缩短的代码:ContentControlIsMouseOverTrue

<ContentControl Margin="2 0 6 0" Width="20" Height="20">
    <Image>
        <Image.Source>
            <DrawingImage >
                <DrawingImage.Drawing>
                    <GeometryDrawing>
                        // drawing here
                    </GeometryDrawing>
                </DrawingImage.Drawing>
            </DrawingImage>
        </Image.Source>
    </Image>

    <ContentControl.Style>
        <Style>
            <Style.Triggers>
                <Trigger Property="UIElement.IsMouseOver" Value="True">
                    <Setter Property="ContentControl.Content">
                        <Setter.Value>
                            <Viewbox  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Stretch="Uniform">
                                // Canvas here
                            </Viewbox>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ContentControl.Style>

</ContentControl>

使用 Snoop,我确实可以检查IsMouseOver是否设置为 true,但Content从未更改。我在这里想念什么?是否可以更改Content使用ContentControl触发器?

标签: c#wpf

解决方案


您还需要ContentControl.Content在样式设置器中设置。问题是样式的触发器的优先级低于显式分配的值。您明确设置内容(作为孩子),因此它会覆盖样式尝试在触发器中应用的任何更改。

例子:

<ContentControl Margin="2 0 6 0" Width="20" Height="20">
    <ContentControl.Style>
        <Style>
            <Setter Property="ContentControl.Content">
                <Setter.Value>
                    <TextBlock Text="Original"/>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="UIElement.IsMouseOver" Value="True">
                    <Setter Property="ContentControl.Content">
                        <Setter.Value>
                            <Viewbox Stretch="Uniform">
                                <TextBlock Text="Changed"/>
                            </Viewbox>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ContentControl.Style>
</ContentControl>

推荐阅读