设计器流程在具有绑定内容的“自定义控件”中终止

时间:2019-03-20 14:16:14

标签: c# wpf visual-studio mvvm dependency-properties

我从Gruopbox创建了一个自定义用户控件。但是,为了在视图中用作容器,我必须为DependecyProperty创建一个Content。这会导致VS2017中出现Unhandled Exception has occurred错误。

Picture of the error

但是,仅当我将gruopbox中的Content属性绑定到我的新媒体资源时,这种情况才会发生。

<UserControl
    x:Class="Infrastructure.Controls.GroupBox.CollectionBox"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    x:Name="Form"
    d:DesignHeight="450"
    d:DesignWidth="800"
    mc:Ignorable="d">

    <GroupBox Content="{Binding Content, ElementName=Form}"/>

</UserControl>

代码在后面

public new object Content
    {
        get => (object)GetValue(ContentProperty);
        set => SetValue(ContentProperty, value);
    }
public new static readonly DependencyProperty ContentProperty = DependencyProperty.Register(nameof(Content), typeof(object), typeof(CollectionBox), new PropertyMetadata(null));

我尝试在绑定到其他控件中使用FalloutValue,因为我认为设计人员不知道要在容器中放入什么。但是,错误不断发生。

在运行时和视图设计器中,控件外观和工作正常。我只是看不到它的设计师。

谢谢。

1 个答案:

答案 0 :(得分:1)

您不需要另一个Content属性,只需另一个ControlTemplate即可定义控件的视觉结构,包括绑定到控件Content的GroupBox:

<UserControl x:Class="Infrastructure.Controls.GroupBox.CollectionBox" ...>
    <UserControl.Template>
        <ControlTemplate TargetType="UserControl">
            <Border> <!-- or any other control(s) here -->
                <GroupBox Content="{TemplateBinding Content}"/>
            </Border>
        </ControlTemplate>
    </UserControl.Template>
</UserControl>