问题标签 [dependency-properties]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
36712 浏览

.net - WPF中的依赖属性和附加属性有什么区别?

WPF 中的(自定义)依赖属性和附加属性有什么区别?各有什么用途?实现通常有何不同?

0 投票
2 回答
1652 浏览

user-controls - Silverlight 2.0:在更改依赖属性之前确定是否设置了依赖属性

我在从 Control 继承的自定义控件上有一个依赖属性(前景)。当我加载控件时,我想查看用户是否设置了依赖属性,或者在我为它们设置值之前它是否使用了它的默认值。这个问题有点复杂,这里是:

该控件位于用户添加到其项目中的自定义控件库中。当他们设置他们的项目时,我可以让他们使用给定的 x:key 在他们的 app.xaml 文件中添加一行,其中包含我在为控件设置默认值时读取的设置。但是,如果他们在代码或 xaml 中设置值,我不想使用此全局值设置值。这里有几个案例可以帮助我想象我在说什么:

  1. 用户从我的库中创建一个控件并将其放在他们的页面上。然后他们将前景设置为绿色。我希望该控件的前景值是绿色的。

  2. 用户在他们的 app.xaml 中添加了一个特殊的行,声明他们希望特定类型的所有控件都具有红色的前景。我希望所有这类控件的前景值都是红色的。

  3. 用户在他们的 app.xaml 中添加了一个特殊的行,声明他们希望特定类型的所有控件都具有红色的前景。然后,他们将单个控件(在 xaml 中)的前景值设置为黄色。我希望这种类型的所有控件的前景值都是红色的,除了他们指定为黄色的那个。

加载控件时,我想读取依赖属性以查看它们是否设置了值,或者它是否是样式中定义的默认值。如果它是默认值,我想从 app.xaml 文件中读取他们的特殊行并将前景设置为该颜色。

0 投票
1 回答
2852 浏览

c# - 如何将 PropertyChangedCallback 添加到基类的依赖属性?

我有一个派生自 System.Windows.Controls.UserControl 的类,我需要将 PropertyChangedCallback 添加到 FrameworkElement.Margin 依赖属性。

这是如何从我的 C# 代码中完成的?我在 MSDN 中找不到任何好的例子。

0 投票
2 回答
6328 浏览

c# - 在 Silverlight 中添加 UIElementCollection DependencyProperty

我想将依赖属性添加到UserControl可以包含UIElement对象集合的 a 中。您可能会建议我应该从中获得控制权Panel并为此使用该Children属性,但在我的情况下这不是一个合适的解决方案。

我已经这样修改了UserControl

我正在这样使用它:

不幸的是,当我运行应用程序时出现以下错误:

使用集合语法设置属性部分中明确指出:

[...] 您不能在 XAML 中显式指定 [UIElementCollection],因为 UIElementCollection 不是可构造的类。

我能做些什么来解决我的问题?解决方案是否只是使用另一个集合类而不是UIElementCollection?如果是,推荐使用什么集合类?

0 投票
3 回答
2268 浏览

c# - 是否有一种 *clean* 方法可以使只读依赖属性反映另一个属性的值?

下面的代码是我目前的解决方案。

如果您需要几分钟才能弄清楚这段代码在做什么,我听到了。

如果有的话,这是一个丑陋的混乱。我会杀了看到另一种选择,(但不要让这阻止你回应...... :-)。哦,天哪,我什至(基本上)通过删除转换器代码来缩写它,当我看到这段代码时,我仍然感到阅读障碍。

我试图模仿的一个很好的例子是 FrameworkElement.ActualWidth 属性。您知道如何计算和重新分配 ActualWidth 属性,无论何时 Width 属性更改,或何时重绘控件,或其他任何时候?------

从开发人员的角度来看,它看起来就像是数据绑定在努力工作。
但 ActualWidth 是一个只读的依赖属性。微软真的必须通过这个巨大的代码垃圾洞才能使其工作吗?或者有没有更简单的方法来利用数据绑定系统的现有功能?

0 投票
1 回答
418 浏览

c# - 如果属性值没有变化,是否可以从 IValueConverter“取消”依赖属性分配?

我在类的依赖属性上有一个数据绑定集。我还有一个 IValueConverter 来处理基于其他元素的这个值的计算。我的问题的上下文在 IValueConverter.Convert 方法中。

#1
如果计算的返回值等于当前属性值,我可以告诉框架不要打扰 SetValue,因为没有逻辑变化?还是框架会自动检测到这一点,而不是浪费时间在内部设置属性?

#2
如果计算的返回值对该属性无效,我可以告诉框架将属性保留为当前值,而不是将其设置为 DependencyProperty.UnsetValue?

0 投票
1 回答
6414 浏览

c# - 如何向现有的依赖属性回调添加逻辑?

我正在尝试将 PropertyChangedCallback 添加到 UIElement.RenderTransformOriginProperty。当我尝试覆盖 PropertyMetadata 时引发异常。

我搜索了 MSDN 和 Google,我所能想到的就是这个。DependencyPropertyDescriptor.AddValueChanged 在那篇文章的某个时候被建议,但这不会解决我的问题,因为这不是每个实例的回调。

我完全不明白这个例外意味着什么。有谁知道我做错了什么?

0 投票
4 回答
1494 浏览

.net - 如何创建自定义 *write-only* 依赖属性?

我需要知道制作只写依赖属性的过程是什么。我可以看到 DependencyProperty 类没有用于只写属性的特殊“Register”方法,但我不知道 RegisterAttached 方法是否适用于我正在尝试做的事情。

此属性需要是依赖属性,而不是简单的 CLR 属性。在内部,我的班级需要在此属性上使用 PropertyChangedCallback 以保持稳定。

我知道可以创建只写依赖属性,因为它在
Pro C# 2008 and the .NET 3.5 Platform, Page 1061中有非常清楚的说明。
但是,这是我什至可以在同一页面上找到“依赖属性”和“只写”的唯一地方。而且这位作者显然认为没有必要向读者展示除了基本的读写依赖属性之外的任何程序。当然,这本书可能是一堆废话——但这本书看起来很标准,所以我认为作者是正确的可以肯定。我认为互联网上信息的缺乏源于这样一个事实,即通常没有人需要制作这样的房产。

我知道想要创建自己的只写依赖属性听起来很可疑。我向你保证,在我想要的地方是有意义的。我的类有一个属性,其值仅对设置它的对象有用。如果稍后另一个对象要请求此属性的值,那么在不知道 setter 的原始上下文的情况下,它将无法从该值中得出任何合理的意义。

此属性不用于提供信息目的。让外部对象尝试以这种方式使用属性值是有问题的、危险的和安全风险。所以我认为最好的设计是禁止对这个属性进行读操作。任何使用我的课程的人都会发现他们被迫按照预期的方式使用课程,最终效果会更好、更干净。

0 投票
2 回答
162 浏览

.net - 我可以创建一个只读的依赖属性吗?

我需要这个依赖属性只能用于读取操作。外部对象不应为其赋值。

0 投票
1 回答
2680 浏览

c# - 尝试在绑定中转换用户控件的属性时出现无效的强制转换异常

我有一个带有文本框的用户控件。我试图通过在 UserControl 中实现具有相同名称的 DependencyProperty 来公开 texbox 的 Text 属性。因此:

get 部分似乎在我的应用程序中工作正常。但是,我尝试使用转换器将按钮的 IsEnabled 属性绑定到其中两个 UserControls 的 Text 属性,该转换器将检查两个 UserControls 的 Text 属性是否都是空字符串。加载应用程序窗口时出现以下错误:

System.InvalidCastException 未处理 Message="无法将 MS.Internal.NamedObject 类型的对象转换为 System.String 类型。"

Convert 方法如下所示:

抛出异常时,values[0] 和 values[1] 都具有值 DependencyProperty.UnsetValue。

我哪里出错了?