gpt4 book ai didi

wpf - 将 UserControl 属性公开给 XAML

转载 作者:行者123 更新时间:2023-12-04 13:50:57 27 4
gpt4 key购买 nike

WPF 控件具有某些属性(UserControl.Resources、UserControl.CommandBindings),这些属性可以从用户控件声明的 XAML 中添加项目。例子:

<UserControl ... >
<UserControl.CommandBindings>
...
</UserControl.CommandBindings>

<UserControl.Resources>
...
</UserControl.Resources>
</UserControl>

我在用户控件中定义了一个新的列表属性:
public partial class ArchetypeControl : UserControl {
...
public List<Object> UICommands { get; set; }

我想像使用资源和 CommandBindings 一样将项目添加到此列表中,但是当我这样做时:
<c:ArchetypeControl.UICommands>

</c:ArchetypeControl.UICommands>

我收到错误消息“错误 4 在‘ArchetypeControl’类型中找不到可附加属性‘UICommands’。”

建议?

——

鉴于评论,我创建了一个测试控件来显示整个代码并重现问题。我正在使用 Visual Studio 2010。
<UserControl x:Class="ArchetypesUI.TestControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:c="clr-namespace:ArchetypesUI"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">

<c:TestControl.TestObject>

</c:TestControl.TestObject>

<Grid>

</Grid>
</UserControl>

——
namespace ArchetypesUI
{
/// <summary>
/// Interaction logic for TestControl.xaml
/// </summary>
public partial class TestControl : UserControl
{
public Object TestObject { get; set; }

public TestControl()
{
InitializeComponent();
}
}
}

现在我得到的错误是“错误 2 附加属性 'TestControl.TestObject' 未在 'UserControl' 或其基类之一上定义。”

最佳答案

看看你的 XAML:

<UserControl>
^^^^^^^^^^^
<c:TestControl.TestObject>
^^^^^^^^^^^
</c:TestControl.TestObject>
</UserControl>

在这里,您要声明一个 UserControl,然后尝试在其上设置 TestControl 属性。由于 UserControl 没有 TestControl.TestObject 属性,因此 WPF 无法在 UserControl 对象上设置该属性。您可能会说,“但是我声明了一个 TestControl 类型的 UserControl。我的 UserControl 是一个 TestControl!”但事实并非如此。上面的声明是在声明 TestControl 类:它没有创建 TestControl 的实例,因此它不能在其上设置实例属性。

相反,TestObject 属性供 TestControl 用户在 TestControl 的各个实例上设置:
<local:TestControl>
<local:TestControl.TestObject> <!-- Now it will work -->
</local:TestControl.TestObject>
</local:TestControl>

如果您想为 TestObject 属性设置默认/初始值,那么您可以在 TestControl 构造函数中或(如果 TestObject 是依赖属性)通过 TestControl 默认样式(尽管这更适用于自定义控件而不是用于用户控制)。

关于wpf - 将 UserControl 属性公开给 XAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2404080/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com