【问题标题】:Trigger content change on IsMouseOver [duplicate]在 IsMouseOver 上触发内容更改 [重复]
【发布时间】:2020-04-25 21:55:00
【问题描述】:

我正在尝试将IsMouseOver 属性集上的ContentControlContent 更改为True。这是稍微缩短的代码:

<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 永远不会改变。我在这里想念什么?是否可以使用触发器更改 ContentContentControl

【问题讨论】:

  • 直接设置的内容值(通过将&lt;Image&gt;标签放入ContentControl)比触发器中的Setter设置的值具有更高的优先级,因此触发器没有效果。

标签: c# wpf


【解决方案1】:

您还需要在样式设置器中设置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>

【讨论】:

  • 感谢您抽出宝贵时间。我不明白你对You need to set the ContentControl.Content in the style setter, too 的意思。我虽然我已经这样做了。您可以将正确的代码复制粘贴到答案中吗?
  • @RobertSegdewick:添加了一个简化示例。
  • @RobertSegdewick:很高兴它有帮助!
  • 确实如此。我昨天提出了另一个问题,但并没有引起太大的关注。有时间请看一下:stackoverflow.com/questions/59636936/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 2014-04-19
相关资源
最近更新 更多