WPF - 内容更改之前的数据绑定触发

2024-04-09

如何创建在绑定更改值之前触发的触发器?如何对数据模板执行此操作?

<ContentControl Content="{Binding Path=ActiveView}" Margin="0,95,0,0">
    <ContentControl.Triggers>
        <--some triger to fire, when ActiveView is changing or has changed ?!?!? -->
    </ContentControl.Triggers>

public Object ActiveView
{
    get { return m_ActiveView; }
    set {
        if (PropertyChanging != null)
            PropertyChanging(this, new PropertyChangingEventArgs("ActiveView"));
        m_ActiveView = value;
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs("ActiveView"));
    } 
}

如何为 DataTemplate 执行此操作?

<DataTemplate DataType="{x:Type us:LOLClass1}">
            <ContentControl>
                <ContentControl.RenderTransform>
                    <ScaleTransform x:Name="shrinker" CenterX="0.0" CenterY="0.0" ScaleX="1.0" ScaleY="1.0"/>
                </ContentControl.RenderTransform>
                <us:UserControl1/>
            </ContentControl>
            <DataTemplate.Triggers>
                <-- SOME TRIGER BEFORE CONTENT CHANGES-->
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetName="shrinker" Storyboard.TargetProperty="ScaleX" From="1.0" To="0.8" Duration="0:0:0.3"/>
                            <DoubleAnimation Storyboard.TargetName="shrinker" Storyboard.TargetProperty="ScaleY" From="1.0" To="0.8" Duration="0:0:0.3"/>
                        </Storyboard>
                    </BeginStoryboard>
                </-- SOME TRIGER BEFORE CONTENT CHANGES-->
            </DataTemplate.Triggers>
        </DataTemplate>

如何在绑定更改之前收到通知? (我想捕获变化的视觉组件位图并创建滑动视图动画)

- - - - - 解决方案 - - - - - -

我创建了从 ContentControl 派生的自定义控件并覆盖了 ContentProperty ValueChanged 回调

public class SmartContentControl : ContentControl
{
    public static readonly RoutedEvent ContentChangingEvent = EventManager.RegisterRoutedEvent("ContentChanging", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(SmartContentControl));
    public event RoutedEventHandler ContentChanging
    {
        add { AddHandler(ContentChangingEvent, value); }
        remove { RemoveHandler(ContentChangingEvent, value); }
    }

    public SmartContentControl()
    {
        ContentProperty.OverrideMetadata(typeof(SmartContentControl), new FrameworkPropertyMetadata(new PropertyChangedCallback(ContentPropertyChangedCallback)));
    }

    private static void ContentPropertyChangedCallback(DependencyObject _object, DependencyPropertyChangedEventArgs _eventArgs)
    {
        SmartContentControl control = (SmartContentControl)_object;
        RoutedEventArgs newEventArgs = new RoutedEventArgs(SmartContentControl.ContentChangingEvent);
        control.RaiseEvent(newEventArgs);
    }
}

使“ActiveView”成为依赖属性并使用价值强制机制 http://msdn.microsoft.com/en-us/library/ms745795.aspx并在 Coerce 值回调中填充内容。

希望能帮助到你!!

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

WPF - 内容更改之前的数据绑定触发 的相关文章

  • 以编程方式触发iOS摇动事件

    如何以编程方式触发 iOS 中的摇动事件 我尝试过以下方法 但它总是崩溃 void shake NSLog TEST UIMotionEventProxy m NSClassFromString UIMotionEvent alloc in
  • 如何在MVVM中管理多个窗口

    我知道有几个与此类似的问题 但我还没有找到明确的答案 我正在尝试深入研究 MVVM 并尽可能保持纯粹 但不确定如何在坚持模式的同时启动 关闭窗口 我最初的想法是向 ViewModel 发送数据绑定命令 触发代码来启动一个新视图 然后通过 X
  • 从固定文档中删除页面?

    如何从固定文档中删除页面 我添加这样的页面 Add page to pageContent PageContent pageContent new PageContent IAddChild pageContent AddChild fix
  • WPF画布性能-children.add调用多次

    我在长画布上绘制了很多线条 想想条形图 并对其性能进行了相当好的调整 使用低级几何类并冻结它们等 这极大地提高了性能 但仍然需要几秒钟将几千个项目加载到画布中 我对应用程序进行了性能分析 看起来每次调用都花费了很大一部分时间canvas c
  • 调用线程无法访问该对象,因为另一个线程拥有它

    我已经阅读了很多关于此错误的帖子 但我不明白如何在我的解决方案中解决它 我有一个进度条对话框 其中包含一些逻辑 通过按钮单击从 MainFrame 调用 void OnBtnClick object sender RoutedEventAr
  • 异步WCF调用来保存线程?

    In 另一个问题 https stackoverflow com q 19731600 279516 建议我发送异步网络请求 而不是在后台线程上发送同步请求 原因是为了不浪费一根线 我试图理解这是怎么回事 这是最初的做法 我可以理解这里怎么
  • 如何防止在 ActiveX 方法调用期间重新进入 WPF 事件处理程序?

    我们从 WPF 和 STA 应用程序中调用 ActiveX 组件上的方法 此调用是通过以下方式后期绑定执行的 res ocx GetType InvokeMember methodName flags null ocx args 其中 oc
  • WPF 错误:属性元素不能位于元素内容的中间。它们必须位于内容之前或之后

    我有一个MergedDictionaries and DateTemplate里面一个ResourceDictionary一切都很好 直到我添加了一个Converter
  • 如何将文本放在 RadioButton 的顶部

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

    我创建了一个非常简单的新项目 仅测试 Microsoft WPF DataGrid 行为 不涉及其他 我只使用标准的 DataGrid
  • 使用 ASP.NET 控件而不进行数据绑定

    看来我使用 ASP NET 数据绑定太久了 以至于忘记了一些基础知识 我正在 ASPX 页面中动态创建一个表 无需数据绑定 foreach XXX x in TTTT gt tr td td tr
  • 如何修复圆角按钮中边框和背景之间的空白?

    我为我的 WPF 应用程序创建了一个简单的按钮模板
  • 如何从 XAML 设置 WPF 用户控件属性?

    我试图从 XAML 设置同一用户控件的多个实例的 fill 属性 以便区分它们 我在控件的 C 代码隐藏中使用依赖属性 并在实例化控件时在 XAML 中引用该属性 这是我尝试过的简化示例 首先是用户控件的 XAML
  • WPF 如何从 DataTemplate 访问控件

    我有一个包含网格的数据模板 网格内有一个组合框
  • 在后台进程中访问 WPF FlowDocument

    在后台访问 WPF FlowDocument 我的问题涉及在 WPF 后台访问 UI 对象 我见过几十个示例应用程序 它们都很简单 易于理解 其中 95 告诉你如何显示进度条 这并不是我想要的 我的问题是这样的 我想通过访问 RichTex
  • WPF 还是 WinForms 作为内部工具?

    在我的公司 我们开发了许多内部工具 从简单的实用程序到成熟的编辑器 这些工具的首要任务是稳定性 可用性和周转时间 意味着添加新功能的速度 到目前为止 我们一直在使用 WinForms 但有几个新工具正在酝酿中 我正在权衡是否应该继续使用 W
  • WPF .exe - 大文件大小

    我正在开发一个 WPF 应用程序 发现 exe 大小超过 1 2MB 我想减少最终可执行文件的大小 代码不过200kb 我在项目中使用了一些 png图片 总共占用了20kb左右 为什么最终的可执行文件这么大 我使用 ILDASM 统计信息来
  • WPF水平滚动条不可见

    我在 ScrollViewer 中有一个网格 网格只有一列和许多行 我将控件添加到网格行中 问题是 当我添加控件时 我可以看到 VerticalScrollBar 但尽管我添加了非常宽的控件 但我看不到 Horizo ntalScrollB
  • WPF 4.0 InvokeCommandAction 兼容性 (System.Windows.Interactivity)

    当我在 WPF 4 0 中插入 InvokeCommandAction Blend 4 SDK 时遇到问题 用户控件未显示 并且我遇到了一些例外情况 登录底部 如果我的 xaml 代码中没有该行 就没有问题 但没有事件触发器 我已经在外部灯
  • 如何更改 WPF TabControl 的 ItemTemplate 的样式以便设置选项卡标题的背景颜色?

    我使用 WPF TabControl 的 ItemTemplate 属性来绑定每个 TabItem 标头的内容 我还使用 ItemContainerStyle 属性将 TabItem 的内容设置为动态选择的用户控件 此方法 100 按预期工

随机推荐

  • C++20 中是否有一个浮点数包装器,可以让我默认飞船运算符?

    我正在观看 使用 C 20 三路比较 Jonathan M ller Meeting C 2019 演讲 其中提到了包含浮点成员的类的问题 问题源于这样一个事实 涉及 NaN 的 IEEE 754 比较很奇怪 并且不提供总排序 Talk 提
  • 使用 tmap tm_bubble 添加固定大小的中断

    我正在尝试创建一个 tmap 气泡图 其中大小和颜色美观具有相同的固定中断 设置style fixed and breaks c Inf seq 10 10 by 2 5 Inf 正在为颜色变量生成所需的结果 但大小变量保持不变 我正在处理
  • 在同一个类中使用两个 UIPickerView

    我为第一个 UIPickerView 编写了这段代码 void viewDidLoad NSURL url NSURL URLWithString http localhost 8080 Data resources converter c
  • C#:通过 200 万个对象进行内存高效搜索,无需外部依赖

    我需要能够搜索集合大约 200 万个 C 项目 搜索应该可以在多个字段上进行 简单的字符串匹配就足够了 使用外部依赖项 例如数据库不是一个选择 但是使用内存数据库就可以了 主要目标是做到这一点内存效率高 集合中的类型非常简单 没有长字符串
  • 如何找到 toast 小部件的布局参数?

    我喜欢的布局toastwidget非常多 这意味着圆角 透明度 浅灰色边框 有没有办法查看像这样的android标准小部件的布局参数toast 我想定义一个TextView具有相同的布局参数 布局可以在下面找到 SDKBASEDIR pla
  • 如何在 ASP.NET C# 中发送电子邮件

    我对这个很陌生ASP NET http en wikipedia org wiki ASP NETC 区域 我计划通过 ASP NET C 发送邮件 这是SMTP http en wikipedia org wiki Simple Mail
  • 使用 Google+ API 获取用户凭据

    我正在尝试包括谷歌登录在我的android应用程序中使用谷歌 API 我可以从用户那里获取帐户详细信息 但登录后我会得到null when 请求用户名使用调用 Plus PeopleApi getCurrentPerson mGoogleA
  • 错误QApplication:没有这样的文件或目录

    我已经安装了具有 Qt 的 C SDK 但是当我尝试编译链接 QApplication 的代码时 它给了我错误 Error QApplication no such file or directory 我如何链接这些库 我搜索目录 有一个名
  • javascript 文件缓存的依据是什么?

    javascript 文件在什么基础上被缓存 假设我从一个网站加载一个名为 m script js 的文件 而在另一个网站上我使用相同的名称 m script js 但内容不同 浏览器会获取新的名称 还是只是查看名称并从缓存中加载它 两个
  • 检查位掩码的特定位

    我正在与Bitmasks in python 据我所知 这些是整数数组 当它们解压缩为二进制格式时 它们会告诉您数组中给定元素的 32 位中的哪一个被设置 1 我想知道检查数组的任何元素是否设置了 4 个特定位的最快方法 我不关心其余的 我
  • 更改所选单选按钮标签的样式

    我试图在表单中选择单选按钮标签时更改其边框颜色 我发现这个问题几乎正是我想要做的 CSS 如何设置选定单选按钮标签的样式 https stackoverflow com questions 4641752 css how to style
  • 程序太大

    我收到此错误消息 Procedure too large 在 VBA 中 这个错误的原因和解决办法是什么 您可能有一个或多个巨大的过程 函数 我认为 VBA 每个过程的限制为 64k 或其他值 您可以通过将该过程拆分为多个过程来修复此问题
  • 从 pandas.DataFrame 的每一列中获取最高值

    这是我的pandas DataFrame import pandas as pd data pd DataFrame first 40 32 56 12 89 second 13 45 76 19 45 third 98 56 87 12
  • Rails 加入多态关联

    我有一个名为的多态关联Notifiable在一个名为Notifiaction module Notifiable def self included base base instance eval do has many notificat
  • 泛型编程是多态性的一个例子吗?

    我正在做一项家庭作业 一个项目 其中一个标准是我必须以一种显着提高代码整体质量或功能的方式使用多态性 我做了一个哈希表 如下所示 public class HashTable
  • 垂直居中,右对齐,多行文本在绝对定位的 div 中,具有 Flexbox 父级

    我有一些绝对定位的 div 有两行文本 一个 h2 和一个 p 我试图让文本 在绝对定位的 div 内垂直居中 右对齐 并且 h2 和 p 标签之间有一个换行符 绝对定位的 div 包含在父级中 所以我想我可以使用 flexbox 来解决这
  • “由于在生成器中使用而发生移动”错误是什么意思?

    我遇到了关于生成器的问题 use tokio runtime Runtime use tokio task JoinHandle use std sync Arc pub fn run f Box
  • 在android中以编程方式设置设备时间[重复]

    这个问题在这里已经有答案了 我需要动态设置设备时间 如果可能 请指导我 据我尝试 MainActivity java Calendar c Calendar getInstance c set 2010 1 1 12 00 00 清单文件
  • PHP smtp.office365.com 用于电子邮件

    是否可以将PHP应用程序邮件与Office365集成 我已经尝试过但发现了这个错误 authentication failure SMTP SMTP server does not support authentication code 2
  • WPF - 内容更改之前的数据绑定触发

    如何创建在绑定更改值之前触发的触发器 如何对数据模板执行此操作