wpf - 使用元素语法在 UserControl 上设置附加属性值
问题描述
假设我在命名空间 ns 中有一个类型为 DataTemplate 的附加属性“Attached.Template”,我希望通过 XAML 在我的 UserControl 上设置它。有没有让我这样做的语法?以下是一些不起作用的事情:
<!-- fails; UserControl may have only one child -->
<UserControl>
<ns:Attached.Template>
<DataTemplate />
</ns:Attached.Template>
<Grid />
</UserControl>
<!-- fails; the '(' character cannot be included in a name -->
<UserControl>
<UserControl.(ns:Attached.Template)>
<DataTemplate />
</UserControl.(ns:Attached.Template)>
<Grid />
</UserControl>
<!-- fails; "UserControl.ns" is an undeclared prefix -->
<UserControl>
<UserControl.ns:Attached.Template>
<DataTemplate />
</UserControl.ns:Attached.Template>
<Grid />
</UserControl>
属性定义非常标准;只需遵循 R# 的内置模板:
public static class Attached
{
public static readonly DependencyProperty TemplateProperty = DependencyProperty.RegisterAttached(
"Template", typeof(DataTemplate), typeof(Attached),
new PropertyMetadata(default(DataTemplate)));
public static void SetTemplate(DependencyObject element, DataTemplate value) =>
element.SetValue(TemplateProperty, value);
public static DataTemplate GetTemplate(DependencyObject element) =>
(DataTemplate) element.GetValue(TemplateProperty);
}
解决方案
看来您必须Content
像这样显式设置 UserControl:
<UserControl>
<ns:Attached.Template>
<DataTemplate/>
</ns:Attached.Template>
<UserControl.Content>
<Grid/>
</UserControl.Content>
</UserControl>
这也有效:
<UserControl>
<Grid/>
<ns:Attached.Template>
<DataTemplate/>
</ns:Attached.Template>
</UserControl>
IMO XAML 解析器中的一个奇怪的错误或缺陷。
推荐阅读
- firebase - 使用 Firebase 模拟器运行 Firebase Admin 时是否需要凭据?
- python-3.x - 我的 python gmail api 自动化没有检索它找到的所有电子邮件
- python - Python:: 分配随机值,但应包含特定数字
- python - pysftp - IOError - 当我在另一端看到完整文件时没有这样的文件
- angular - Angular 构建文件项目端口更改为 8080 端口
- c - 使用定时器进行闪烁和计数
- nginx - 从 Docker 容器内部,如何修复 Docker 文件中的错误?
- r - 使用 dplyr 重新编码 sqlite 列值
- php - 使用 Laravel 和 Live Wire 自动填充表单输入
- .net - 如何使用 Autofac.Extras.DynamicProxy 在 Blazor 组件生命周期方法上应用 AOP 日志记录?