使用我的自定义面板设置附加属性ItemsControl中的项目在WPF中不起作用

时间:2012-06-08 18:10:00

标签: wpf wpf-controls

我已经创建了一个自定义面板,您可以使用该面板执行以下操作:

<custom:Timeline>
    <Button custom:Timeline.PointInTime="6:30 PM" />
</custom:Timeline>

当我这样做时,它的效果非常好。但是,当我做这样的事情时(这是我需要做的):

<DataTemplate x:Key="TimelineItemTemplate">
    <Grid d:DesignWidth="169" custom:Timeline.PointInTime="{Binding NotifyTime}">

    </Grid>
</DataTemplate>

<ItemsControl Grid.RowSpan="2" ItemTemplate="{DynamicResource TimelineItemTemplate}" ItemsSource="{Binding Items}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <custom:Timeline/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

未在InternalChildren集合中的控件上设置PointInTime附加属性:

protected override Size ArrangeOverride(Size a_arrangeBounds)
{
    foreach (UIElement uiChild in InternalChildren)
    {
        var pointInTime = GetPointInTime(uiChild);

        // Arranginess stuff
        // Timeline.PointInTimeProperty is not set on 'uiChild'. WTH?
    }

    return base.ArrangeOverride(a_arrangeBounds);
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

ItemTemplates位于容器内,ItemsControls容器为ContentPresenter。在任何情况下,您可能希望绑定ItemsControl.ItemContainerStyle中的属性,这将在容器上设置属性。