使用 MVVM 模式挂钩 Storyboard.Complete 事件

2024-04-07

基本上,我得到的是一个简单的警报消息设置。有一个单独警报的视图,其中一些数据绑定到虚拟机的文本和颜色(绿色表示成功,红色表示错误等)。

<Border Margin="0 0 0 20" Background="{Binding Path=BackgroundColor}" BorderBrush="#D4D4D4" BorderThickness="1" CornerRadius="8">
    <Border.Effect>
        <DropShadowEffect Color="DarkGray"/>
    </Border.Effect>
<Grid >
        <Button Content="X" HorizontalAlignment="Left" 
            Margin="268,10,0,0" VerticalAlignment="Top" Width="20" RenderTransformOrigin="-0.48,0.727"/>
        <TextBlock x:Name="Message" 
           Foreground="White" FontWeight="SemiBold" FontSize="13px"
           Text="{Binding Path=Message}" 
           HorizontalAlignment="Left" Width="250"
           TextWrapping="Wrap"
           VerticalAlignment="Center" RenderTransformOrigin="-4.395,-0.038" Margin="7,13,0,25"/>
    </Grid>
</Border>

目标是当您单击“X”按钮时让它们消失,并带有漂亮的淡入淡出动画。我有一个故事板来处理褪色:

<UserControl.Triggers>
    <EventTrigger RoutedEvent="Button.Click">
        <BeginStoryboard>
            <Storyboard>
                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)">
                    <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
                    <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0"/>
                </DoubleAnimationUsingKeyFrames>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</UserControl.Triggers>

现在,我想做的是将 Caliburn.Micro 挂接到故事板的Completed具有消除实际视图的方法的事件(在另一个视图中存在这些警报的可绑定集合,以便警报将堆叠起来,然后根据用户的需要消除)。

我一开始尝试了这样的事情,认为它会与我的任何其他绑定一样工作:

<Storyboard cal:Message.Attach="[Event Completed] = [Action DismissMessage($source, $eventArgs)]">
<!-- rest of the codez... -->

但出现以下错误:

Cannot attach type "ActionMessage" to type "Storyboard". Instances of type "ActionMessage" can only be attached to objects of type "FrameworkElement".

我想这很有道理……但是处理这种绑定的最佳方法是什么?我的思绪不可避免地开始尝试一些黑客解决方案,例如从视图的代码隐藏中调用视图模型,但这似乎违反了 MVVM。

有什么建议么?


我认为避免查看代码后面的最好方法是使用StoryboardCompletedTrigger来自 Blend 交互库:

首先在您的 xaml 中包含正确的引用:

xmlns:i="http://schemas.microsoft.com/expression/2010/
xmlns:ie="http://schemas.microsoft.com/expression/2010/interactions"   

然后将交互触发器添加到视图中并将其操作设置为CallMethodAction

<i:Interaction.Triggers>
  <ie:StoryboardCompletedTrigger Storyboard="{StaticResource MyStoryboard}">
    <ie:CallMethodAction MethodName="DismissMessage" TargetObject="{Binding}"/>
  </ie:StoryboardCompletedTrigger>
</i:Interaction.Triggers>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MVVM 模式挂钩 Storyboard.Complete 事件 的相关文章

  • 如何(完全)在列表框中实现就地编辑?

    我正在构建一个应用程序 其中ListBox正在显示Description其项目的属性 我想实现与您在 Windows 资源管理器中编辑文件名时发现的相同类型的就地编辑功能 但我发现这需要大量工作 到目前为止我所拥有的是ContextMenu
  • C# - 继承WPF布局 - Window from Window

    我的 Window 继承有问题 我不明白问题是什么 我认为 我的布局 MediaLibrary xaml 必须继承 MainWindow 但我不知道该怎么做 有2类 主窗口 xaml
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • 如何禁用列表框上的突出显示但保留选择?

    我无法找到如何不允许我的列表框突出显示所选项目 我知道我没有添加触发器来突出显示该项目
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • 将 MahApps 图标与 ContextMenu 结合使用

    我正在使用 MahApps Metro UI 工具包编写 WPF 应用程序 http mahapps com guides quick start html http mahapps com guides quick start html
  • Windows 8 Windows 应用商店应用程序中的中继命令

    由于 CommandManager 在 win8 Metro 应用程序中不可用 是否有 RelayCommand 的版本 有一个版本here https xp dev com svn mytoolkit Shared MVVM RelayC
  • 如何将 WPF UIElement 从可视化树移动到固定页面?

    我的 MVVM 应用程序使用屏幕上的视觉对象将屏幕内容渲染到打印文档 我的视图有一个ContentControl使用DataTemplate资源来确定要显示的内容 但是当我尝试将该内容添加到FixedPage对象 我得到一个Argument
  • OxyPlot WPF 不适用于按钮单击

    我在使用 OxyPlot 时遇到了一些问题 但无法通过他们的文档或其他搜索来解决 我正在开发一个 wpf 应用程序 它允许用户通过按钮单击事件打开 csv 然后执行一些数学运算并报告一些有用的信息 我想绘制一些生成的数据 因此使用 OxyP
  • 跨项目/dll 访问 Xaml 中的资源

    是否可以从另一个项目引用存储在 ResourceDictionary 构建操作 资源 中的 Xaml 资源 我想将资产合并到主项目的资源字典中或单独访问它们 例如 项目 MyResources 包含一个名为 Assets 的文件夹 其中有一
  • ViewModel 中的 TextBox CaretIndex 属性

    是否可以通过视图中定义的 Binding 获取 设置 wpf 视图模型中 TextBox 控件的 CaretIndex 属性的值 Thanks 这里的问题是如何获得CaretIndex of the TextBox通过视图模型进行控制 如果
  • 如何更改 OxyPlot Y 轴字符串格式?

    谁能告诉我如何更改 Y 轴字符串格式 我想向 Y 轴百分比添加百分号 我正在使用 OxyPlot 在 wpf 中生成图表 这是我的尝试 但它不起作用 Func
  • 在 WPF 中将 png 图像合并为单个图像

    我正在寻找一种将一些 PNG 平铺图像合并为大图像的方法 所以我搜索并找到了一些链接 This https stackoverflow com questions 6325057 c sharp combine lots of images
  • 如何使用 ObjectDataProvider 将枚举绑定到 XAML 中的 ComboBox

    我正在尝试绑定一个Enum to a ComboBox 我见过很多人使用ObjectDataProvider但我似乎无法访问它 我还注意到有些人在一段时间内使用它Window Resources 而不是Page Resources但我找不到
  • 使用 DataBindingComponent 的 Inflate 方法

    当 Glide 成功渲染图像后 我在更新文本视图时看到此错误 致命异常 java lang IllegalStateException 必需 CustomBinding 类中的 DataBindingComponent 为 null 绑定适
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • 如何防止在 ActiveX 方法调用期间重新进入 WPF 事件处理程序?

    我们从 WPF 和 STA 应用程序中调用 ActiveX 组件上的方法 此调用是通过以下方式后期绑定执行的 res ocx GetType InvokeMember methodName flags null ocx args 其中 oc
  • 如何在清除排序描述后删除wpf网格排序箭头

    我单击网格标题对列进行排序 然后单击 重置 按钮以通过其集合视图清除排序描述 但排序箭头图标仍然保留在标题中 如何去除它 我在尝试弄清楚如何完全清除网格中的排序时遇到了这个问题 感谢 krishnaaditya 回答如何清除标题中的排序箭头
  • 如何将文本放在 RadioButton 的顶部

    我正在尝试实现附件中显示的效果 但没有成功 甚至有可能吗 我试图将文本框放在单选按钮内 并将其设置为水平和垂直内容对齐 但它没有按我想要的方式工作 欢迎任何建议 Resource
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange

随机推荐

  • Bootstrap 3 Datepicker v4 - 设置默认日期

    我正在使用这个日期时间选择器http eonasdan github io bootstrap datetimepicker http eonasdan github io bootstrap datetimepicker 在我的编辑表格中
  • 运行时无命令输出:'am start -n Error

    当我在 Eclipse 中运行应用程序并单击按钮启动新活动时 我的应用程序强制关闭 并收到此错误 null Error Sat Apr 23 19 53 21 CDT 2011 No command output when running
  • MongoDb 和 Nodejs SSL/安全连接

    我如何通过ssl连接mongoDB和nodejs 我正在使用此代码来创建连接 但它不起作用 var Db require mongodb Db var Server require mongodb Server Db connect mon
  • 在类实例之间共享字典内容

    假设我有一个像这样的字典结构 var stocks new Dictionary
  • Xcode 4.4.1 - C 编程 - 添加新的 .c 文件

    我正在 Xcode 4 4 1 中编写 C 程序 一个新项目从 main c 文件开始 这显然是我的主文件 如果我想编写一个不同的程序怎么办 如果我选择 文件 gt 新建文件 Xcode 将在 main c 旁边创建一个新的 c 文件 问题
  • OpenGL ES 2.0 多个程序或多着色器还是什么?它是如何工作的?

    问题 TL DR 我的问题从根本上来说是我不知道 OpenGL ES 2 0 期望我如何编写和使用多个着色器 或者如果甚至建议 期望一个人会这样做 这里的基本问题是 如果我有一个苹果 一块发光的岩石和一个模糊网格 它们都在同一个 3D 世界
  • ffmpeg:“未找到引用的 QT 章节轨道”

    Using ffmpeg将 QuickTime 中的音频替换为 WAV 中的音频 谁知道我为什么会这样Referenced QT chapter track not found Command ffmpeg i video t 25 i a
  • JavaScript 中的文本搜索?

    我有一个页面 其中包含 200 多个采用这种格式的链接 h1 a href somelink Somelink a some text that explain the meaning of the link h1 现在 为了更容易通过此链
  • 生成人类可区分的随机颜色

    我正在尝试在 JavaScript 中随机生成十六进制颜色 然而 生成的颜色几乎无法区分 有办法改善吗 这是我正在使用的代码 function randomColor var allowed ABCDEF0123456789 S while
  • Heroku-未找到 (Python)

    作为一个初学者 我无法再进一步 我正在尝试在heroku上加载python程序 但不知何故总是只出现以下内容 未找到 在服务器上找不到请求的 URL 如果您手动输入 URL 请检查拼写并重试 My logs 2018 02 12T11 33
  • file_get_contents() 与 CURL 等效吗?

    我正在尝试从这样的 url 获取一些 JSON 数据 url http site com search php term search term here result json decode file get contents url 然
  • postgresql 中第一个和最后一个值聚合函数可以正确处理 NULL 值

    我知道有聚合函数可以获取行的最后一个和第一个值PostgreSQL https wiki postgresql org wiki First last 28aggregate 29 我的问题是 它们不能按我的需要工作 我可以使用 postg
  • 根据另一个单元格范围的值创建对一个单元格范围的注释

    我想为一系列单元格创建注释 注释应包含另一个单元格范围的值 这是我到目前为止所拥有的 Private Sub Worksheet Change ByVal Target As Range Dim sResult As String If U
  • CSS3:背景颜色过渡为透明

    我想做一个过渡div that 以 开始background color rgba 242 245 169 1 三秒后 以 结束background color rgba 242 245 169 0 还有 在两场表演之间background
  • PySpark 在嵌套数组中反转 StringIndexer

    我正在使用 PySpark 使用 ALS 进行协作过滤 我原来的用户和项目 ID 是字符串 所以我使用StringIndexer将它们转换为数字索引 PySpark 的 ALS 模型要求我们这样做 安装模型后 我可以获得每个用户的前 3 个
  • 无法在 Python OpenCV v4.20 中使用 SIFT

    我正在使用 OpenCV v4 20 和 PyCharm IDE 我想使用 SIFT 算法 但我收到这个错误 我在互联网上寻找此错误的解决方案 但没有一个对我有帮助 你知道这个错误的解决办法吗 使用 pip 我可以安装至少 3 4 2 16
  • 一个 dataGridView 中的两个实体

    我有两个关联实体 我通过从对象数据源拖放并手动绑定到列表来创建 dataGridView 一个实体的一切工作都很好 是否有可能通过拖放 手动填充来创建一个具有两个实体 Zamow和ZamSkany 的dataGridView 我可以通过视图
  • 无 IDLE 子进程连接

    我是 python 编程新手 想尝试在 IDLE 而不是 OSX 命令行中编辑脚本 但是 当我尝试启动它时 它给出错误 空闲子进程没有建立连接 空闲子进程无法启动子进程或个人防火墙软件阻止连接 我没有配置防火墙 那么问题可能是什么 您可以尝
  • 在列表视图滚动期间,首先显示错误的图像,然后显示正确的图像

    I am using listview with images in my application But whenever I scroll the list the wrong images are shown first and th
  • 使用 MVVM 模式挂钩 Storyboard.Complete 事件

    基本上 我得到的是一个简单的警报消息设置 有一个单独警报的视图 其中一些数据绑定到虚拟机的文本和颜色 绿色表示成功 红色表示错误等