ControlTemplate.Triggers Silverlight 3 中的 WPF 等效项

2024-02-12

我的 WPF 应用程序中有此 controltemplate + 触发器内容。

<ControlTemplate TargetType="me:MyControl" x:Key="fade">
    <ContentPresenter - other stuff />
    <ControlTemplate.Triggers>
        <Trigger Property="IsTransitioned" Value="True">
            <Trigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation -<stuff>- />                                
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.EnterActions>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

这在 WPF 中很酷,并且对于我来说基于上面的触发器编写它也非常直观。

当我将其移植到 Silverlight (3) 时,我被告知必须使用 VSM、状态和组等,因为不支持控制模板上的触发器。 我查看了一些示例,甚至尝试在上面的触发器位置应用 VSM 位,但无法使其工作。

有人向我建议,除了 xaml 中的 VSM 之外,我还必须处理一些事件等。

SL3 型号对我来说太痛苦了。请帮忙。


Silverlight 3 引入了交互触发器,据我所知,它可以做你想做的事情,但有点复杂。不过,关于它们的例子还很少。

如果您手动执行此操作,则需要引用 System.Windows.Interactivity 和 Microsoft.Expression.Interactions(从 Blend 3 开始,如果您安装了该类,该类将位于您的引用选项卡中)。

如果您在 Blend 中添加触发器,那么它会自动添加这些触发器。这在 Silverlight 3 中称为“行为”,您可以在“资源”选项卡的“行为”部分的 Blend 中找到它们。

他们如何工作的一个例子。请注意故事板位于第二个矩形的资源中,我无法让它在 ControlStoryboardAction.Storyboard 内工作,但如果我将矩形设为 ContentControl 并将其放入模板中,它确实可以工作。这可能是一个错误或者我遗漏了一些东西:

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    x:Class="SLTrigger.MainPage"
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
    xmlns:ic="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions" 
    xmlns:im="clr-namespace:Microsoft.Expression.Interactivity.Media;assembly=Microsoft.Expression.Interactions">
  <Grid x:Name="LayoutRoot">
    <StackPanel>
        <Rectangle Margin="5" Fill="Blue" Width="200" Height="100">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonDown">
                    <ic:ChangePropertyAction PropertyName="Fill" Duration="0">
                        <ic:ChangePropertyAction.Value>
                            <SolidColorBrush Color="Red"/>
                        </ic:ChangePropertyAction.Value>
                    </ic:ChangePropertyAction>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Rectangle>
        <Rectangle Margin="5" x:Name="AnimatedRectangle2" Fill="Blue" Width="200" Height="100">
            <Rectangle.Resources>
                <Storyboard x:Key="AnimationStoryboard">
                    <ColorAnimation 
                        Storyboard.TargetName="AnimatedRectangle2"
                        Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"
                        To="Red"
                        AutoReverse="True"
                        Duration="0:0:0.5" />
                </Storyboard>
            </Rectangle.Resources>
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonDown">
                    <im:ControlStoryboardAction ControlStoryboardOption="Play" Storyboard="{StaticResource AnimationStoryboard}">
                        <!--
                        Doesn't work, but does work inside control templates??
                        <im:ControlStoryboardAction.Storyboard>
                            <Storyboard>
                                <ColorAnimation 
                                        Storyboard.TargetName="AnimatedRectangle2"
                                        Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"
                                        To="Red"
                                        AutoReverse="True"
                                        Duration="0:0:0.5" />
                            </Storyboard>
                        </im:ControlStoryboardAction.Storyboard>
                        -->
                    </im:ControlStoryboardAction>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Rectangle>
        <ContentControl>
            <ContentControl.Template>
                <ControlTemplate>
                    <Rectangle Margin="5" x:Name="AnimatedRectangle3" Fill="Blue" Width="200" Height="100">
                        <i:Interaction.Triggers>
                            <i:EventTrigger EventName="MouseLeftButtonDown">
                                <im:ControlStoryboardAction ControlStoryboardOption="Play">
                                    <im:ControlStoryboardAction.Storyboard>
                                        <Storyboard>
                                            <ColorAnimation 
                                                    Storyboard.TargetName="AnimatedRectangle3"
                                                    Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"
                                                    To="Red"
                                                    AutoReverse="True"
                                                    Duration="0:0:0.5" />
                                        </Storyboard>
                                    </im:ControlStoryboardAction.Storyboard>
                                </im:ControlStoryboardAction>
                            </i:EventTrigger>
                        </i:Interaction.Triggers>
                    </Rectangle>
                </ControlTemplate>
            </ContentControl.Template>
        </ContentControl>
        <TextBlock TextAlignment="Center" Text="Click the rectangles" />
      </StackPanel>
    </Grid>
</UserControl>

类文件中没有任何内容:

using System.Windows.Controls;

namespace SLTrigger
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ControlTemplate.Triggers Silverlight 3 中的 WPF 等效项 的相关文章

  • 等待 GUI 中显示多个任务

    假设我有两个资源A and B 我想通过 MVVM 向我的用户展示这两个内容 this 视图模型 this A GetA this B GetB 当我开始使用 TPL 时 this A await GetAAsync this B awai
  • Sql触发器是同步的还是异步的?

    我有一个表 上面有一个插入触发器 如果我通过存储过程的一个插入语句将 6000 条记录插入到该表中 存储过程会在插入触发器完成之前返回吗 只是为了确保我的想法正确 触发器应该只被调用一次 我知道 被调用 不是正确的词 一次 因为只有 1 个
  • Silverlight NavigationFramework 在导航时不会更改地址栏(不显示主题标签)

    我正在使用导航框架 基本上得到了一个用于导航的框架 我试过玩mainFrame JournalOwnership因为我想也许改变它可能与此有关 但没有任何改变 由于与导航相关的类结构非常小 因此我对我做错了什么感到有点困惑 因为我想不出可以
  • 由于级联触发器更新该行,该行未被删除

    我在删除表中的行时遇到问题 该表具有调用第二个表的触发器的触发器 该触发器更新第一个表中的行 这是描述 Table A id b table count Table B id a table id fk 表 A 有一个 BEFORE DEL
  • 数据模板中的数据绑定不起作用

    我有 UserControl 对多个演示文稿进行过滤 而该演示文稿又具有 ContentControl 内容是各个演示文稿之间有所不同的单独过滤控件 该方案在视觉上按预期工作 但数据绑定却不然 输出中没有数据绑定错误 DataContext
  • WPF/Silverlight 中的动画资源?

    我正在寻找一些好的资源来增强 WPF Silverlight 中使用的动画 故事板概念 有什么指点吗 发布的一个链接是 WPF 特定的 对于 Silverlight 这里还有一些其他资源 MSDN 动画概述 http msdn micros
  • Silverlight 与 MVVM 继承:ModelView 和与 Model 匹配的 View

    今天我有一个关于 Silverlight 4 RC MVVM 和继承概念的特殊问题 并正在寻找最佳实践解决方案 我认为我了解 MVVM 背后的基本思想和概念 我的Model对 一无所知视图模型 as the 视图模型本身并不知道View T
  • 在 Silverlight 中编辑并继续?

    Edit And Continue 是我最喜欢的调试工具之一 我之前曾在基于 C 的 Winforms 和 ASP NET 项目中使用过它 但是 我在 VS 2008 上运行 Silverlight 3 0 应用程序 每当我尝试进行更改 中
  • 如何使用 INSTEAD OF 触发器获取插入表中的新记录的标识

    我在表上使用 INSTEAD OF 插入触发器来设置该行上递增的版本号 并将该行复制到第二个历史记录 审核表 这些行插入到两个表中都没有问题 但是 我无法将第一个表中的新身份返回给用户 Schema CREATE TABLE Table1
  • 寻找使用库版本的方法?

    我正在通过库在多个电子表格上部署脚本 但正如您所知 脚本 目前 还无法知道它是否正在运行最新版本 我试图通过为我的代码创建自己的版本控制来找到解决此问题的方法 我有一个 Web 服务返回我的库代码的最新版本号 以便我可以对其进行比较 但 o
  • 使用 Caliburn.Micro 将绑定选择更改为 ViewModel

    我们在一个新的 Silverlight 项目中使用了 Caliburn Micro 一切都运行良好 内置约定将按钮单击事件绑定到 viewModel 但我不确定处理数据网格和组合框上的 SelectionChanged 事件的最佳方法是什么
  • 如何隐藏数据透视项标题?

    我希望有一个具有 PivotItems 但没有横向数据透视项标题文本的数据透视控件 它是横向模式下的画廊 当恢复为纵向时 它应该再次显示 PivotItems 标题 解决办法就是制作文字PivotItem Header 不好 因为标题文本占
  • 如何将 NHibernate 和 DTO 与 RIA 服务结合使用

    我将 NHibernate 与 RIA 服务和 Silverlight 4 一起使用 我创建 DTO 来通过 RIA 服务传输数据 而不是分发我的域层对象 根据 Martin Fowler 的分布式对象设计第一定律 不要分发您的对象 DTO
  • 以编程方式清除 Silverlight 应用程序存储?

    我为一些客户发布了 Silverlight 应用程序 我在发布更新时遇到问题 我希望当用户最初加载网页时 如果他们的应用程序存储比上次更新网站时旧 那么this http www softcity com article internet
  • PostgreSQL 9.3 触发器函数插入带有参数化名称的表

    我正在尝试在 Postgres 中动态分区日志条目 我有 53 个子表 1 个代表每周的日志条目 并且希望使用触发器将 INSERT 路由到子表 我运行该函数INSERT INTO log5 VALUES NEW 并且它有效 我用以下命令运
  • WPF/Silverlight 面试问题? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 您希望某人在 WPF Silverlight 开发工作的面试中了解哪些类型的问题 入门级 强大的 NET 2 0背景并且愿意学习 解释一下依赖属
  • 当选择更改时使用 JQuery 进行检测

    我有一个 Jqgrid 它动态生成这样的选择
  • 在触发器函数中使用动态表名进行 INSERT

    我不确定如何实现类似以下的目标 CREATE OR REPLACE FUNCTION fnJobQueueBEFORE RETURNS trigger AS DECLARE shadowname varchar TG TABLE NAME
  • 新的 Windows 应用程序 - 什么语言?

    我们目前正处于开发 Windows 桌面应用程序的前期阶段 但当听到有关 Windows 8 Silverlight WPF Jupiter 的所有最新讨论时 我不知道该相信什么了 现在用WPF启动一个新项目是不是有问题 我应该切换到 Si
  • 触发器以捕获服务器中的架构更改

    是否可以实现类似以下触发器的东西 CREATE TRIGGER tr AU ddl All Server ON DATABASE WITH EXECUTE AS self FOR DDL DATABASE LEVEL EVENTS AS D

随机推荐