Пользовательский элемент управления WPF, полученный из ItemsControl, не может отображать связанные данные - PullRequest
3 голосов
/ 10 марта 2011

Я создал пользовательский элемент управления с именем MovableItemsControl, унаследованный от ItemsControl, чтобы переопределить метод GetContainerForItemOverride () . Моя проблема в том, что ни один из объектов в связанной коллекции не отображается. В настоящее время я привязываюсь к OberservableCollection строк и вижу, что они находятся в ItemsSource , когда я просматриваю отладчик.

Пользовательский элемент управления показан ниже:

public class MovableItemsControl : ItemsControl
{
    static MovableItemsControl()
    {          
        DefaultStyleKeyProperty.OverrideMetadata(typeof(MovableItemsControl), new FrameworkPropertyMetadata(typeof(MovableItemsControl)));
    }

    /// <summary>
    /// Wraps each content object added to the ItemsControl in a NodeWrapper
    /// </summary>
    protected override DependencyObject GetContainerForItemOverride()
    {
        NodeWrapper nodeWrapper = new NodeWrapper();            
        return nodeWrapper;
    }

    protected override bool IsItemItsOwnContainerOverride(object item)
    {
        return item is NodeWrapper;
    }
}

NodeWrapper - это пользовательский элемент управления, состоящий из пользовательского элемента управления, полученного из Thumb (MoveThumb) и метки (метка предназначена только для тестирования).

    <Style TargetType="{x:Type local:MovableItemsControl}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:MovableItemsControl}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>   

Ответы [ 2 ]

5 голосов
/ 10 марта 2011

Создан ли стиль по умолчанию для MoveableItemsControl с ControlTemplate в файле Generic.xaml проекта, содержащего элемент управления?В противном случае элемент управления не будет отображаться при загрузке.

ОБНОВЛЕНИЕ
Шаблон ControlTemplate для ItemsControl должен содержать ItemsPresenter в качестве заполнителя для элементов, которые нужно вставить (похож на ContentPresenter для ContentControl).Ваш текущий шаблон имеет только пустую границу.

2 голосов
/ 05 мая 2011

Я думаю, что вы отсутствуете внутри вашего стиля ControlTemplate Border:
a) ItemPresenter (например, <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>) ИЛИ
b) Панель с установленным значением IsItemsHost (например, <StackPanel IsItemsHost="True"/>)

...