- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想延长 FrameworkElement
Button
等元素按收集的收集类型附加属性分类DependencyObjects
.
困难在于集合项的绑定(bind)不起作用:没有出现调试或运行时错误,但从未调用绑定(bind)的源。
我注意到集合类型的附加属性不继承自类 DependencyObject
.
我猜 DataContext
属性(property)将由任何 child 继承DependencyObject
对象(只要父对象也是 DependencyObject
对象)。由于集合类型的附加属性不继承自 DependencyObject
DataContext
不会发生属性(property)继承。
DependencyObject
的实例可以继承DataContext
属性为 DataContext
是 FrameworkElement
中定义的属性? DependencyObject
如何管理 DataContext
查找?ElementName=PageName
指定绑定(bind)源效果不佳(例如 {Binding MyProperty="{Binding DataContext.PropertySource1, ElementName=PageName}
)?如果DependencyObject
还负责ElementName
查找,它是如何做到的?DependencyObject
的UWP集合? (在 WPF 中有 FreezableCollection<T>
类,但我在 UWP 环境中找不到挂件。)下面的 XAML 标记显示了一个示例扩展,其中 Binding
不起作用。
<Button Name="Button">
<ext:MyExtension.MyCollection>
<ext:MyDependencyObject MyProperty="{Binding PropertySource1}"/>
<ext:MyDependencyObject MyProperty="{Binding PropertySource1}"/>
</ext:MyExtension.MyCollection>
</Button>
如果我对非集合类型的附加属性执行以下扩展,则可以正确解析绑定(bind)。
<Button Name="Button">
<ext:MyExtension.MyProperty>
<ext:MyDependencyObject MyProperty="{Binding PropertySource1}"/>
</ext:MyExtension.MyProperty>
</Button>
下面的代码显示了一个示例集合类型的附加属性实现。考虑附加属性类还包含一个非集合类型附加属性的定义(它与绑定(bind)一起正常工作)。
public class MyDependencyObject: DependencyObject
{
public object MyProperty
{
get { return (object)GetValue(MyPropertyProperty ); }
set { SetValue(MyPropertyProperty , value); }
}
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(object), typeof(MyProperty), null);
}
public class MyPropertyCollection : ObservableCollection<MyDependencyObject> { }
public static class MyExtension
{
// Collection-type AttachedProperty with DependencyObject items
public static MyPropertyCollection GetMyPropertyCollection(DependencyObject obj)
{
MyPropertyCollection collection = (MyPropertyCollection )obj.GetValue(MyCollectionProperty );
if (collection == null)
{
collection = new MyPropertyCollection();
collection.CollectionChanged +=
(sender, e) =>
{
//intiailization of elements possible
};
obj.SetValue(MappingsProperty, collection);
}
return collection;
}
public static void SetMyPropertyCollection(DependencyObject obj, MyPropertyCollection value)
{
obj.SetValue(MyCollectionProperty , value);
}
public static readonly DependencyProperty MyCollectionProperty =
DependencyProperty.RegisterAttached("MyCollection", typeof(MyPropertyCollection), typeof(MyExtension), null);
// DependencyObject-type AttachedProperty
public static MyProperty GetMapping(DependencyObject obj)
{
return (MyProperty )obj.GetValue(MyPropertyProperty );
}
public static void SetMapping(DependencyObject obj, MyProperty value)
{
obj.SetValue(MyPropertyProperty , value);
}
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.RegisterAttached("MyProperty", typeof(MyDependencyObject), typeof(MyExtension), null);
}
最佳答案
在 WPF 中,可以通过使用 FreezableCollection<T>
或者通过继承 Freezable
类,IList<T>
和 IList
:
DependencyObject
因为无法访问 DependencyObject
的两个必需方法,但是 Freezable
它们周围有 wrapper 。IList<T>
和 IList
随心所欲。OnFreezablePropertyChanged(null, newItem)
.OnFreezablePropertyChanged(item, null)
.OnFreezablePropertyChanged
方法内部会调用 DependencyObject
的两个方法提供或删除继承上下文 ( source )。
但是在 UWP 中没有 Freezable
并且没有这样的方法,所以在 Windows 10.0.10240.0 之前是不可能的。但是,如果您的目标是 v10.0.10240.0 或更高版本,则应使用 DependencyObjectCollection
这是为行为而生的。
The purpose of the DependencyObjectCollection class is mainly to support the tooling and portability of behaviors. Behaviors are a technique for defining certain basic interactions of a UI element entirely in XAML, without requiring an event handler and code-behind.
因此,在 UWP 和 WPF 中,仅当子项是逻辑/可视子项或者它们是依赖属性值时,才能将继承上下文提供给子项。正因为如此 Binding
带套装 ElementName
在您的情况下使用时不起作用。 ElementName
当绑定(bind)附加到依赖对象时,属性用于在运行时解析对象,而不是在编译时。
UWP 绑定(bind)的工作方式类似于 WPF 绑定(bind),因此例如请参阅 ElementObjectRef.GetObject
来自第二个平台。
关于c# - 集合类型附加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47471077/
我关注了 tutorial on creating a popup for an add-on在 Firefox 中,效果很好。 我现在遇到的问题是它创建的弹出窗口不会更改大小以适应我添加到其中的内容
我有一些视频,我需要连接一个标题并添加一些覆盖,问题是我需要先做覆盖,否则时间不正确,然后才将标题连接到视频的开头 ffmpeg -i talk.mp4 -i start_pancarte.png
我正在尝试附加一个 CSV 文件。这是我正在使用的线路。不幸的是,我找不到 export-csv 的附加选项。任何想法都有助于使其发挥作用。 Get-ADGroupMember "Domain Adm
我正在努力理解 Attach API (com.sun.tools.attach.*) 的用途。它的典型用途是什么?它是为了“模拟”JVM,以便您可以在不部署/启动代码的情况下测试您的代码吗?它是一个
我不明白为什么这不起作用。 soup_main = BeautifulSoup('FooBar') soup_append = BeautifulSoup('Meh') soup_main.body.
我有以下代码来返回我想要的字符串 $sql = " SELECT `description` FROM `auctions` WHERE `description` REGEX
我正在尝试从数组中附加具有多个值的元素,但我做错了。这是我的代码: for(var i=0; i ` + pricesArray[i].start_date ` ` + pricesArray[i
我正在尝试将图像链接添加到此 javascript 附加表中。使图像位于按钮上方 这是代码 $("#1").append(""+section+""+no+""+price+""+button+""
我有一个问题,我已经解决了,但它太烦人了。 我有一个 js 代码,当使用“追加”按下按钮时,它会放下一些 html 代码,并且通过该代码,我为 x 按钮提供了一个 id,并为容器元素提供了一个 id。
我想逐行读取文件,并且每一行可能都有很多字符。 这个版本的readline效果很好 func readLine(r *bufio.Reader) ([]byte, error) { var (
我有一个网站,每次用户登录或注销时,我都会将其保存到文本文件中。 如果不存在,我的代码在附加数据或创建文本文件时不起作用。这是示例代码 $myfile = fopen("logs.txt", "wr"
我正在尝试使用 typescript 和 Formik 创建一个自定义输入字段。我可以就完成以下代码的最佳方式获得一些帮助吗?我需要添加额外的 Prop 标签和名称......我已经坚持了一段时间,希
我有一个字符串 big_html,我想将它添加到某个 div 中。我观察到以下方面的性能差异: $('#some-div').append( big_html ); // takes about 10
如何使用 FormData 创建以下结果 ------WebKitFormBoundaryOmz20xyMCkE27rN7 Content-Disposition: form-data; name="
有没有办法附加 jQuery 事件处理程序,以便在任何先前附加的事件处理程序之前触发该处理程序?我遇到了this article ,但代码不起作用,因为事件处理程序不再存储在数组中,而这正是他的代码所
我正在开发一个需要网络登录的 iPhone 应用程序。像往常一样我打电话 [[UIApplication sharedApplication] openURL:loginURL]; 这将关闭应用程序并
我想开发一个仅针对特定域激活的扩展。 我不希望它在不浏览此特定域时出现在浏览器菜单中。 有可能这样做吗? 最佳答案 可能:对于菜单,您可以添加一个弹出窗口侦听器,用于检查当前加载的URL(docs f
这段 JavaScript 代码 function writeCookie(CookieName, CookieValue, CookieDuration) { var expiration
我正在使用 Handlebars 来渲染使用ajax从本地服务器获得的信息。我的 HTML 看起来像: {{#each Tabs}}
我尝试了以下代码,但当输入框中没有数据时它不会通知。当我直接添加此内容(不附加)时,它会起作用。我在这里做错了什么 var output = "\n"+ "\n"+
我是一名优秀的程序员,十分优秀!