我可以在不知道绑定本身的情况下更改 DataTrigger 中绑定的属性吗?

2023-11-24

我有一个TextBox如果框未聚焦,则格式化数字,但在编辑时保持数字未格式化。

这是我想要的多个数字文本框的样式,但它们都包含不同的文本绑定。常规文本设置器和触发式文本设置器之间的唯一区别是触发式文本设置器具有StringFormat=N2在绑定中。

有没有办法让这种风格变得通用,比如只改变StringFormatDataTrigger 中绑定的属性?

<TextBox>
    <TextBox.Style>
        <Style TargetType="{x:Type TextBox}">
                <Setter Property="Text" Value="{Binding SomeValue, StringFormat=N2, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
            <Style.Triggers>
                <Trigger Property="IsKeyboardFocusWithin" Value="True">
                    <Setter Property="Text" Value="{Binding SomeValue, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

有没有办法让这种风格变得通用,比如只改变 DataTrigger 中绑定的 StringFormat 属性?

Inherit Style新的 XAML 将变成这样:

 <TextBox>
    <TextBox.Style>
        <local:FlyingStyle Binding="{Binding ElementName=This, Path=SomeValue}" StringFormat="F2" />
    </TextBox.Style>
 </TextBox>

这是班级...

public class FlyingStyle : Style
{
    public FlyingStyle()
        : base(typeof(TextBox))
    { }

    string _stringFormat;
    public string StringFormat
    {
        get { return _stringFormat; }
        set
        {
            _stringFormat = value;
            CheckInitialize();
        }
    }
    Binding _binding;
    public Binding Binding
    {
        get { return _binding; }
        set
        {
            _binding = value;
            CheckInitialize();
        }
    }
    void CheckInitialize()
    {
        if (StringFormat == null || Binding == null) { return; }// need both

        Setters.Add(CreateSetter(Binding, StringFormat));

        var trigger = new Trigger
        {
            Property = UIElement.IsKeyboardFocusWithinProperty,
            Value = true,
        };
        trigger.Setters.Add(CreateSetter(Binding));
        Triggers.Add(trigger);
    }

    /// <summary>Creates the common <see cref="Setter"/>.</summary>
    static Setter CreateSetter(Binding binding, string stringFormat = null)
    {
        // must create a copy, because same binding ref but diff StringFormats
        var bindingCopy = new Binding
        {
            // these could be copies as well
            UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
            ValidatesOnDataErrors = true,
            Mode = BindingMode.TwoWay,
            Path = binding.Path,

            AsyncState = binding.AsyncState,
            BindingGroupName = binding.BindingGroupName,
            BindsDirectlyToSource = binding.BindsDirectlyToSource,
            Converter = binding.Converter,
            ConverterCulture = binding.ConverterCulture,
            ConverterParameter = binding.ConverterParameter,
            ElementName = binding.ElementName,
            FallbackValue = binding.FallbackValue,
            IsAsync = binding.IsAsync,
            NotifyOnSourceUpdated = binding.NotifyOnSourceUpdated,
            NotifyOnTargetUpdated = binding.NotifyOnTargetUpdated,
            NotifyOnValidationError = binding.NotifyOnValidationError,
            //StringFormat = set below...
            TargetNullValue = binding.TargetNullValue,
            UpdateSourceExceptionFilter = binding.UpdateSourceExceptionFilter,
            ValidatesOnExceptions = binding.ValidatesOnExceptions,
            XPath = binding.XPath,
            //ValidationRules = binding.ValidationRules
        };
        // mutex ElementName, so modify if needed
        // Source = binding.Source,
        // RelativeSource = binding.RelativeSource,

        if (stringFormat != null)
        {
            bindingCopy.StringFormat = stringFormat;
        }
        return new Setter(TextBox.TextProperty, bindingCopy);
    }
}

请注意,我的测试是

  • 通用主窗口
  • 实现 INotifyPropertyChanged
  • SomeValueINPC财产
  • 数据上下文=这个
  • x:名称 = 这个
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在不知道绑定本身的情况下更改 DataTrigger 中绑定的属性吗? 的相关文章

  • 滚动查看器无法在网格上工作

    您好 我正在 Windows 10 中学习 UWP 我需要滚动网格 他们有两段代码很相似 我的本意是在grid2中滚动 第一段代码
  • WPF ListBoxItem 双击?

    WPF ListBox 没有 DoubleClick 事件 至少据我所知没有 是否有针对此问题的解决方法 让我双击某个项目即可让事件处理程序对其执行某些操作 感谢您的帮助 可以将带有参数的命令绑定到ListBoxItem不使用代码隐藏 or
  • WPF DataGrid 的 Items 和 ItemsSource 属性之间有什么区别?

    从我从 Intellisense 收集到的信息来看 区别在于返回类型 并且 ItemsSource 有一个 setter 而 Items 只有一个 getter 但实际上 我不明白这两个属性需要彼此分开 而不仅仅是作为一个属性 有人可以向我
  • 使用MVVM时如何将事件参数作为interaction.Trigger中的参数传递?

    基本上我的自定义类中有一个事件 我将使用事件的参数 gt 属性作为该方法的参数来调用自定义类中的特定方法 您可以观察此信息背后的实际代码 instance FileOpening sender e gt CustomClass Method
  • 全屏模式下的 XBAP

    我想以全屏模式运行 XBAP 有没有办法让IE全屏打开XBAP 由于我以完全信任的方式运行 每当用户单击全屏按钮时 我都会使用 Process Start 方法以 kiosk 模式打开 IE 以下代码解决了我的问题 Process Star
  • DataGridView 数据绑定到 List>

    给定代码 class Foo public string Value get set public int Id get set List
  • WPF 中的 IWin32Window

    我有一个 excel AddIn 它公开 IWin32Window 作为它的主 UI 我想显示一个使用它作为父窗口的 WPF 窗口 我该如何去做呢 您可以使用窗口互操作助手 http msdn microsoft com en us lib
  • 阻止用户取消选择列表框中的项目?

    我有一个列表框 里面有很多项目 用户可以单击某个项目来编辑其内容 如何防止用户取消选择所有项目 即 用户不应该无法选择任何内容 您的情况缺少一个案例 即清除列表后 您将选择列表中不再存在的项目 我通过添加额外的检查来解决这个问题 var l
  • 如何转换WPF项目以便它可以被单独的exe用作类库

    有没有人尝试过或觉得需要在独立的 exe 中启动应用程序并将 WPF 用作另一个 DLL 而不是在其中包含 Main 方法 我看到的优点是逻辑分离 并且能够在 WPF 代码之外设置工厂等 从而减少程序集依赖性 我已经尝试过这样做并且可以做到
  • 仅最后一个用户控件显示内容控件

    我有一个奇怪的问题 我创建了一个带有标签和画布的用户控件 画布引用资源 但画布仅显示在我的堆栈面板中的最后一个控件上 这是我的窗户
  • 过滤绑定到 ItemsControl 的 ICollectionView

    我想制作一个 WPF 应用程序来浏览菜肴食谱 过滤数据时遇到问题 我正在使用 ItemsControl 使我的数据在窗口中看起来像 图块 现在我想用 TextBox 过滤它 但我不知道出了什么问题 这是我的 XAML 绑定
  • wpf 控件宽度绑定

    我有两个带有内容的边框 第二个边框宽度根据情况而变化 在内容上 我试图将第一个边框绑定到第二个边框宽度 但是 它不起作用 我不确定我错过了什么 有人可以给我一些指导吗 下面是我目前正在尝试的示例
  • XAML WPF 如何在 FlowDocument 上添加内嵌背景图像?

    下面的代码是给Flow Document添加背景图片
  • WPF DataGrid 显示点而不是逗号

    在网上查找并寻找答案后没有结果 我想向您寻求帮助 我有一个包含 2 列的 SQL 数据库表 浮点数据类型 例如 1 2 1 3 1 4 等 绑定到一个DataGrid XAML 代码
  • WinRT 中的当前文化是错误的

    我正在尝试使用 WinRT 中的当前文化来格式化日期时间值 但CurrentCulture属性似乎并不尊重系统文化 我尝试了以下两个属性 System Globalization CultureInfo CurrentCulture Dis
  • 在WPF中如何添加菜单项事件?

    在我的 WPF 应用程序中 我添加一个菜单 然后在其下添加几个菜单项 例如 我的菜单项之一是 Main Item 然后我在 Main Item 下添加subItem1 subItem2和subItem3 我想单击 subItem1 并执行某
  • 如何检索 ComboBox 选定的值作为枚举类型?

    这是我的Enum code public enum EmployeeType Manager Worker 我将初始化ComboBox值 而表单将自身初始化为 combobox1 ItemsSource Enum GetValues typ
  • 当 DataTable 为空时,DataGrid 显示空行

    我有一个DataGrid dg1 绑定到DataTable 数据集 表 代码运行良好并且DataGrid正在显示数据DataTable正确 但是 如果我Clear the DataTable the DataGrid也很清楚 但留下一个空行
  • 在 WPF 媒体元素中连续重播视频

    我有一个在媒体元素中播放的视频文件 我需要继续播放 因此我尝试了 me play me MediaEnded new RoutedEventHandler me MediaEnded 使用此事件方法 loop to keep video p
  • 如何知道 WPF 中的控件(或窗口)何时被渲染(绘制)?

    我需要将窗口的内容存储到图像中 保存并关闭窗口 如果我在 加载 事件上关闭窗口 则图像包含窗口 其中某些项目绘制正常 其他一些项目仅绘制了一半或扭曲 而其他项目则不在图像上 如果我设置一个计时器并在一定时间后关闭窗口 250 毫秒到 1 秒

随机推荐

  • OpenXml 表错误“每个 之前都需要

    元素”

    我创建了一个 Word 模板 然后通过 OpenXML SDK 对其进行处理 以将文档的某些内容替换为数据库查询中的数据 该模板由一些基本文本组成 并在我想要替换文本的位置注入了纯文本内容控件 然后 我使用这些控件中的文本作为查找替换值的键
  • 在 C# 中获取最后 'N' 个季度

    假设当前季度是 3 年份是 2011 年 我怎样才能获得最后 5 个季度 期望的输出 Q3 2011 Q2 2011 Q1 2011 Q4 2010 Q3 2010 附加 Q 和 我正在尝试如下 int generateQuater 5 i
  • 设计和多个“用户”模型

    我正在使用 Rails 3 2 和 devise 2 0 而且我对 Rails 还很陌生 要求 我想实现以下目标 有 2 个或更多 用户 模型 例如 会员 客户 管理员 所有型号共享一些必填字段 例如电子邮件和密码 每个模型可能有一些独特的
  • 如何在 Linux 上找到包含特定文本(字符串)的所有文件?

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 如何查找文件内容中包含特定文本字符串的所有文件 以下不起作用 它似乎显示了系统中的每个文件 find type f exec
  • 如何在Delphi XE3中解析JSON对象中的指定值?

    我的 JSON 对象如下所示 destination addresses Paris France origin addresses Amsterdam Nederland rows elements distance text 504 k
  • 已收到 SOAP xml 响应但未填充响应对象

    我向供应商的基于 Java 的 Web 服务添加了 服务参考 但我无法控制该服务 我有这个简单的客户端代码 Client myClient new Client CapabilitiesType response client GetCap
  • 将 CSS flex 元素的高度设置为相同的值?

    我有 2 个彼此相邻的 div 我使用 flex 和 justify content align items 垂直和水平居中 例子 HTML div class inner div class section green img src h
  • 如何在 Laravel 分页集合中使用 Transform

    我想在 laravel 5 5 中的分页集合中使用映射或转换 但我正在努力工作 这就是我想做的但是getCollection不可用于LengthAwarePaginator正如我们在以前的 Laravel 版本中所做的那样 如何转换分页集合
  • 如何在Python中压缩文件夹和文件? [复制]

    这个问题在这里已经有答案了 我有一个名为 files 的文件夹 其中包含大量 jpg 照片 我还有一个名为 temp kml 的文件 我想创建一个 KMZ 文件 基本上是一个 zip 文件 其中包含 temp kml 文件和其中包含照片的文
  • org.postgresql.util.PSQLException:致命:抱歉,已经有太多客户端

    我正在尝试连接到 Postgresql 数据库 但收到以下错误 错误 org postgresql util PSQLException 致命 抱歉 已经有太多客户端 该错误是什么意思以及如何修复它 My server properties
  • Linux 中“系统”和“执行”之间的区别?

    有什么区别system and exec家庭命令 特别是我想知道他们中的哪一个创建子进程来工作 system 呼唤sh处理你的命令行 这样你就可以获得通配符扩展等 exec 及其朋友用新的进程映像替换当前的进程映像 With system
  • nameof() 是在编译时评估的吗?

    在 C 6 中 您可以使用nameof 运算符获取包含变量或类型名称的字符串 这是在编译时评估的 还是在运行时通过某些 Roslyn API 评估的 Yes nameof 在编译时评估 查看最新版本的规格 表达式的名称是一个常量 在所有情况
  • Android:单独片段中的多个小吃栏(ViewPager)

    我有一个viewpager 当然还有一些片段 这些片段中的每一个都以 CoordinatorLayout 作为父级 我正在展示一个小吃栏 问题是 如果片段 A 显示小吃栏 那没问题 但如果它的相邻片段 B 也显示小吃栏 则片段 A 中的小吃
  • 参数化 sql 查询 - asp.net / c#

    所以我最近了解到我绝对应该使用参数化查询来避免 SQL 注入等安全问题 一切都很好 我已经成功了 此代码显示了我如何执行此操作的一些代码 param1 new SqlParameter param1 ParameterName userna
  • 如何通过java代码设置JMX远程端口系统环境参数进行远程监控?

    我有一个程序需要动态 即在运行时 打开一个可用的套接字并在其上启动 JMX 代理 此 JMX 参数是在 Java 代码内部设置的 而不是通过命令行设置的 这很好用 此后需要通过 Java Visual VM 进行监控 即发出 JMX 命令等
  • Get 和 post 方法与 HTTP 和 REST 相比的区别

    我是 REST 新手 我想知道什么时候使用get方法 什么时候使用post方法 在我的文献调查过程中 我接触到了这些知识 实际上 当我搜索 HTTP get 和 post 方法时 我读到 get 不对 URL 进行编码 而 post 对 U
  • 通过点击事件查找元素

    如何通过 jQuery 2 2 1 找到每个带有点击事件的元素 这似乎不再起作用 console log data this 0 events Try each function index value if data value 0 ev
  • 调用 $this->load->view() 后停止执行

    在Codeigniter中 我们如何在加载视图后停止执行 我试过这个 function index this gt load gt view myView die do not execute next code 但它导致空白屏幕 http
  • 如何在 bash curl 语句中包含“&”字符

    我正在尝试在 bash 中使用curl来下载网页 但是 URL 中的符号没有像我想要的那样被解释为字符 关于如何让 bash 相信该符号的任何想法 只是一个无聊的角色 没什么特别的 将整个 URL 放在双引号内应该可以解决您的问题
  • 我可以在不知道绑定本身的情况下更改 DataTrigger 中绑定的属性吗?

    我有一个TextBox如果框未聚焦 则格式化数字 但在编辑时保持数字未格式化 这是我想要的多个数字文本框的样式 但它们都包含不同的文本绑定 常规文本设置器和触发式文本设置器之间的唯一区别是触发式文本设置器具有StringFormat N2在