【问题标题】:WPF problems with trigger syntax触发器语法的 WPF 问题
【发布时间】:2009-10-27 01:47:51
【问题描述】:

我无法让以下工作。目标是改变用户控件的 ZIndex 当鼠标悬停在其内容上时。

使用像“Background”这样的简单属性代替 ZIndex 也不起作用。编译器抱怨“无法将值 'Grid.IsMouseOver' 分配给属性 'Property'。对象引用未设置为对象的实例。” (编译启动项目后)。

有人可以提供一个可以改变不同控件的某些属性的触发器的工作示例吗?

<UserControl x:Class="ImageToolWPF.Controls.sample"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">

    <UserControl.Triggers>
        <Trigger SourceName="viewPort" Property="Grid.IsMouseOver" Value="True">
            <Setter TargetName="me" Property="UserControl.Panel.ZIndex" Value="2" />
        </Trigger>
    </UserControl.Triggers>

    <Border Name="border" CornerRadius="3,3,3,3" BorderThickness="3" BorderBrush="Green">
        <Grid Name="viewPort">
            <Label Name="labelTop" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="16" Background="#a0ffffff" Padding="4"/>
        </Grid>
    </Border>
</UserControl>

【问题讨论】:

    标签: wpf xaml triggers


    【解决方案1】:

    这里有很多问题:

    • FrameworkElement.Triggers 只能包含 EventTriggers,不能包含通用触发器。 (请参阅 MSDN 文档中的备注。)您需要将触发器移动到样式中。
    • 在您的 Setter 中,您已将 TargetName 指定为“me”,但似乎没有任何具有该名称的元素。我认为您的意思是让 setter 影响 UserControl 本身。在这种情况下,如果您将 Trigger 移动到 UserControl 上的 Style 中,则可以完全省略 TargetName:样式中的设置器会自动影响样式化元素。
    • 在您的 Setter 中,您指定了 UserControl.Panel 的属性。这意味着您期望目标(称为“我”的东西)具有称为 UserControl 的属性,并且具有称为 Panel 的属性。我认为您正在寻找的是“(Panel.ZIndex)” - 请注意括号中显示这是附加属性名称而不是多部分路径,并且没有 UserControl 前缀。

    【讨论】:

      猜你喜欢
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      相关资源
      最近更新 更多