在ItemsControl的ItemContainerStyle'Blendable'中设置Canvas属性?

时间:2013-01-25 16:31:10

标签: wpf xaml canvas expression-blend itemscontrol

我有一个项目,我使用StackPanel来交换ItemsPanelTemplate

<ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
        <StackPanel IsItemsHost="True" Orientation="Horizontal"/>
    </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

使用Canvas因此

<ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
        <Canvas IsItemsHost="True" Width="Auto" Height="Auto"/>
    </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

我这样做是为了让我可以在时间轴上按照开始时间布置项目而不是相互叠加。但后来我被困在如何为Canvas.Left中的每个项目设置ItemsControl属性。显而易见的地方(我认为)在我Grid的{​​{1}} ItemTemplate DataTemplate中使用,即在这里的某个地方:

<ItemsControl.ItemTemplate>
    <DataTemplate>
        <Grid HorizontalAlignment="Left" VerticalAlignment="Center" Height="10">
            <eventBlockVisualization:FGEventUC/>
        </Grid>
    </DataTemplate>
</ItemsControl.ItemTemplate>

但是这部分XAML没有引用托管Canvas。幸运的是,有一个非常类似的问题,atsjoo要求“Setting Canvas properties in an ItemsControl DataTemplate”和Arcturus answers解释ItemContainerStyle的作用和用法(和LiamV提供了类似的答案here),在我的情况下导致

<ItemsControl.ItemContainerStyle>
    <Style TargetType="ContentPresenter">
        <Setter Property="Canvas.Left" Value="{Binding MinutesFromStartOfLogs}"/>
    </Style>
</ItemsControl.ItemContainerStyle>

这样可以手动编辑XAML,但理想情况下我想在Expression Blend 4或Blend for Visual Studio 2012中操作这些样式和绑定。如果我在Blend的'Objects and Timeline'中选择ItemsControl面板,然后转到菜单'对象 - &gt;编辑其他样式 - &gt;编辑生成的项容器(ItemContainerStyle)'我最终能够编辑ItemContainerStyle但我看不到Blend公开我的XAML中设置的Canvas.Left属性的位置。它在哪里?这是'Blendable'吗?

1 个答案:

答案 0 :(得分:0)

据我所知,这是不可能的。 Blend中没有显示Attached properties,因为它太多了。将元素直接放置在画布左侧并显示顶部属性时,将无法使所有附加属性可用。例如,如果设置属性的元素不在画布中,则可以设置Canvas.Left属性。

设置附加属性的唯一方法是在Xaml中手动执行。