Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 覆盖WPF控件行为的更好方法是:在代码隐藏中添加事件处理程序,还是为同一个控件添加行为类_C#_Wpf_Wpf Controls - Fatal编程技术网

C# 覆盖WPF控件行为的更好方法是:在代码隐藏中添加事件处理程序,还是为同一个控件添加行为类

C# 覆盖WPF控件行为的更好方法是:在代码隐藏中添加事件处理程序,还是为同一个控件添加行为类,c#,wpf,wpf-controls,C#,Wpf,Wpf Controls,最近,我在自定义数字控件中遇到了一个问题,它可以接受双值。但在某些情况下,必须限制它只取整数。在这里,我有两种方法。在文本框的textchangedeventhandler中处理它,或者为自定义数字文本框创建一个行为类。根据性能、标准和可扩展性,我需要了解哪一个更好。我也浏览了这个链接。但根据标准,需要更具体的答案。我的意见是这样的。我喜欢构图而不是继承。关于这一点,网络上有很多讨论(不考虑技术)。或许可以从以下内容开始: 因此,当我想要更改WPF控件的行为时,我通常会使用附加属性(如果您愿意,

最近,我在自定义数字控件中遇到了一个问题,它可以接受双值。但在某些情况下,必须限制它只取整数。在这里,我有两种方法。在文本框的textchangedeventhandler中处理它,或者为自定义数字文本框创建一个行为类。根据性能、标准和可扩展性,我需要了解哪一个更好。我也浏览了这个链接。但根据标准,需要更具体的答案。

我的意见是这样的。我喜欢构图而不是继承。关于这一点,网络上有很多讨论(不考虑技术)。或许可以从以下内容开始:

因此,当我想要更改WPF控件的行为时,我通常会使用附加属性(如果您愿意,也可以使用Behavor)作为初始挂钩。在某些情况下,我会进行复杂的修改,其中我会有一个完整的“侦听器”类来监视和响应控件上的输入

但是,有时可能需要访问控件的受保护成员。如果这无法避免,那么它就是继承


所以,从架构上来说,我会说,首选附加属性(或Behavor),其次是继承。

MVVM?纯MVVM-行为,脏MVVM(或非MVVM)-事件。另一个选择是创建自定义控件。我的建议是处理自定义数字控件的textinputevent,并处理使用正则表达式的Duoble或Integer的行为。只是一个脚注,说明附加的属性路由不是严格的组合。我想我的意思是,我只是想尽可能避免继承。