Процесс конструктора завершен в пользовательском элементе управления с привязкой содержимого - PullRequest
0 голосов
/ 20 марта 2019

Я создал пользовательский элемент управления из Gruopbox. Однако для использования в качестве контейнера в представлении я должен создать DependecyProperty для Content. Это приводит к ошибке Unhandled Exception has occurred в VS2017.

Picture of the error

Это, однако, происходит только тогда, когда я связываю атрибут Content в gruopbox с моим новым свойством.

<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 в Привязке к другим элементам управления, так как предположил, что дизайнер не знает, что поместить в контейнер. Тем не менее, ошибка продолжает происходить.

Во время выполнения и в представлении Designer элемент управления выглядит и работает нормально. Просто в его конструкторе я этого не вижу.

Спасибо.

1 Ответ

1 голос
/ 20 марта 2019

Вам не нужно другое свойство Content, просто еще один ControlTemplate, который определяет визуальную структуру вашего элемента управления, включая GroupBox, который привязывается к элементу Content:

<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>
...