问题标签 [dependencyobject]

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 投票
2 回答
878 浏览

.net - 自定义 DependencyObject 继承树

我正在努力寻找有关 and 使用的属性继承树(或继承上下文)的足够DependencyObject信息DependencyProperty

我想使用DependencyProperty典型 WPF 页面之外的值继承功能,例如对象 A 是逻辑父对象 B,因此分配给对象 A 上的属性的值将自动传播到对象 B,除非它已经在本地设置(有点像FlowDirectionWPF 中的属性)。

如果 Object A 和 Object B 派生自DependencyObject,并且不是a 的子级UIElement (换句话说,Object A 是它自己的),那么您如何建立逻辑树以便DependencyProperty理解 B 是 A 的子级?

Hillberg Freezable Trick以及Josh Smith 的技巧包并不是我想要的。我不想从现有元素树中检索属性...我想创建自己的非可视元素树...即控制继承上下文。

有谁知道这个知识体系隐藏在哪里?

0 投票
3 回答
5301 浏览

wpf - IValueConverter 上的数据绑定

有谁知道是否可以对基于 IValueConverter 的类进行数据绑定?

我有以下转换器:

其目的是通过其 Id 在列表中查找文章,并返回该文章。

但是,我想通过将集合数据绑定到它来填充 Articles 属性,如下所示:

但这似乎不起作用。永远不会调用 setter 方法。source 属性包含一个实际的非空集合,所以这不是问题。

输出日志中也没有关于绑定的错误消息。

有什么线索吗?

0 投票
1 回答
257 浏览

wpf - 是否可以找出包含 DependencyObject 的程序集和文件?

我目前正在为 WPF 开发一个小的本地化框架(甚至不要考虑将我指向 locBAML ......)并且想知道是否有可能找出指定 DependencyObject 的包含程序集。

例如:我在 Window1.xaml 文件中的 XAML 中有一个普通的窗口定义。该窗口包含一个 StackPanel,其中包含一个 TextBlock。

当只有对 TextBlock 的引用时,是否可以找出哪个程序集包含 Window1.xaml 文件?

是否也可以找出 xaml 文件的文件名(在这种情况下为“Window1.xaml”)?

在此先感谢并致以最诚挚的问候, 3Fox

0 投票
1 回答
5981 浏览

wpf - 什么是可冻结的父级?这个错误是什么意思?

我收到此错误:

不能使用属于与其父 Freezable 不同的线程的 DependencyObject

那有什么意思?是英文的吗?父母是冻结的,还是只是可冻结的?如果它使错误消失,有什么方法可以使父母不可冻结?

发生了什么:

我在一个 WPF 应用程序中有两个 opengl winforms 控件,到目前为止,一切都很顺利(我认为)。现在,我添加了一个更新,这样当一个 winform 控件更新图像时,另一个也应该更新。这实际上曾经有效,现在我得到了那个错误。单步执行代码会在随机位置发生崩溃,这让我相信这是垃圾收集错误(即,另一个线程中的某些更新正在创建正在收集垃圾的东西,并且该收集是在随机时间发生的)。

异常在主运行方法中被捕获,它是一个 InvalidOperationException。

我在这里抓着稻草。我从哪里开始?

编辑:看起来导致问题的调用是这个:

我仍在追踪它;如果这一系列行被注释掉,崩溃仍然会发生,并且线程状态有一个“刚刚结束”的线程(因此是垃圾收集假设)。

0 投票
2 回答
4819 浏览

c# - 在依赖对象的 XAML 中启用直接内容创建

我有一堂课CollectionOfThings。顾名思义,它是Thing类实例的简单集合。 Thing类有一个公共的默认构造函数和两个简单​​的公共 get、set 属性IDDisplayName,它们都是字符串。 CollectionOfThing也有公共的默认构造函数。

在 XAML 中,我想使用这样的标记:-

只要 CollectionOfThings 派生自 Collection 类型,一切都很好。不过我CollectionOfThings也想成为一个DependencyObject。我认为创建ICollection<T>, INotifyCollectionChangedetc 的实现很好,这并不难。然后我可以从DependencyObject.

不幸的是ICollection<T>,由于某种原因没有削减它。随着ICollection<Thing>我得到“CollectionOfThings 不支持将事物作为内容”。回去Collection<Thing>,一切正常,但让我没有DependencyObject实施。

建议任何人?

0 投票
1 回答
1693 浏览

wpf - 给定样式的 WPF DependencyObject,如何在代码中获取样式键?

我有一组绑定到数据的控件,我想在这些控件上以编程方式将验证器添加到绑定中。目前,我能够遍历可视化树以找到具有绑定的控件,并将我的验证器添加到这些控件中。但是为了进一步指定哪些控件应该具有特定的验证,我想使用样式。所以我的 XAML 看起来像这样:

在这里,optionalNumericTextBox样式既可以添加验证错误模板,也可以作为装饰器来指示此文本框应该应用可选的数字验证器。

当我遍历可视化树,发现带有绑定的控件,然后需要确定正在使用的样式时,就会出现问题。目前我已经尝试过

这给了我一个 Style对象,但据我所知,这个对象不带有 'optionalNumericTextBox' 值。甚至可以确定密钥还是 XAML 阅读器中丢失了此信息?

0 投票
1 回答
2965 浏览

c# - WPF 绑定混淆:复合 DependencyObject

我有一个 DependencyObject 类组合,如下所示:

在 A、AB 和 AC 上,所有属性都执行典型的 GetValue 和 SetValue 操作,通常引用静态属性。

现在,A、AB 和 AC 类都有对应的 UserControls AGroupBox、ABGrid、ACGrid。AGroupBox 有一个根 A 类属性,ABGrid 有一个根 AB 类属性,ACGrid 有一个根 AC 类属性。

ABGrid 和 ACGrid 都有工作绑定(例如,ABGrid 包含一个 TextBox 控件,其 Text 属性双向绑定到 AB 的 Property1。)我已经通过创建一个简单的 Window 并让 ABGrid 成为 Window 的唯一 Content 子项以及设置背后的代码来验证这一点ABGrid.AB = 新 AB(); ACGrid.AC = new AC(); 的情况相同。

问题是当我尝试用 AGroupBox 做类似的事情时。我尝试将 AGroupBox 添加为 XAML 中 Window 内容的单个子项,并将 AGroupBox.A 属性设置为 new A() {AB = new AB(), AC = new AC()}; 并且控件的绑定失败。AB 和 AC 的 PropertyN 属性具有默认值。

关于我所缺少的任何见解?我应该采取不同的路线吗?

编辑:附加注释-如果我将字符串属性添加到 A,(String1)并将其绑定到 GroupBox 的 Text 部分,则绑定到该属性有效,但不绑定到 A 的 AC 和 AB 属性。

EDIT-2:根据 David Hay 的要求(所有代码都在命名空间 wpfStackOverflow 中):

A.cs

B.cs

C.cs

AGroupBox.xaml

AGroupBox.xaml.cs

BGrid.xaml

BGrid.xaml.cs

CGrid.xaml

CGrid.xaml.cs

窗口1.xaml

Window1.xaml.cs

0 投票
1 回答
307 浏览

wpf - 如何公开 xaml 属性?

我创建了一个 ComboBox 子类并添加了我的功能。

现在我想公开 TextBox 的外部属性,例如:

这可能吗,我可能没有选择错误的特定属性,但我想你明白我的意思。

这可能吗?
我必须单独创建所有属性吗?

0 投票
1 回答
2037 浏览

wpf - 更改 DependencyProperites 时调用 DependencyObject 的绑定

当内部 DependencyProperties 发生变化时,有没有办法通知 DependencyObject 的绑定?

例如,我有这个类:

为此,我有 3 个单独的双向绑定,用于设置 Color1、Color2 和 UseBothColors 的值。但我也有一个 BackgroundDef 实例的绑定,它应该创建一个 Brush 并绘制一个按钮的背景(单一颜色或两种渐变颜色)。我的问题是 DependencyProperties 的双向绑定更新了属性,但是没有调用类实例的绑定,因为显然整个对象没有改变。知道如何在 DependencyProperties 更改时调用 DependencyObject 的绑定吗?

0 投票
1 回答
397 浏览

dependency-properties - 如何判断一个依赖对象是否实现了给定的依赖属性(C#/WPF)

我正在使用System.Windows.Documents命名空间中的类,尝试编写一些通用代码,这些代码将有条件地设置某些依赖项属性的值,具体取决于这些属性是否存在于给定类中。

例如,以下方法为Padding传递的属性分配任意值FrameworkContentElement

然而,并不是所有的具体实现FrameworkContentElement都有一个Padding属性(Paragraph有但Span没有),所以我希望属性分配对于实现这个属性的类型会成功,而对于没有的类型会被忽略。

但似乎上述属性分配对于 的所有派生实例都成功FrameworkContentElement,无论它们是否实现该Padding属性。我做出这个假设是因为我总是能够读回分配的值。

我认为我分配属性值的方式存在一些缺陷。我应该怎么做才能确保给定的依赖属性分配被不实现该属性的类忽略?

非常感谢您的建议。

蒂姆