2

我有一个项目,我ItemsPanelTemplate使用StackPanel因此交换了

<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.LeftItemsControl. 明显的地方(我认为)在Grid我使用的ItemTemplate'sDataTemplate中,即这里的某个地方:

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

但是 XAML 的这一部分没有提及托管Canvas。幸运的是,有一个非常相似的问题,其中 atsjoo 询问“在 ItemsControl DataTemplate 中设置 Canvas 属性”,Arcturus 回答解释了它的作用和使用(并且 LiamV在此处ItemContainerStyle提供了类似的答案),在我的情况下导致

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

这一切都很好手动编辑 XAML,但理想情况下,我想在 Expression Blend 4 或 Blend for Visual Studio 2012 中操作这些样式和绑定。如果我ItemsControl在 Blend 的“对象和时间线”面板中选择,然后转到菜单“对象 -> 编辑其他样式 -> 编辑生成的项目容器 (ItemContainerStyle)' 我最终能够编辑 ItemContainerStyle 但我看不到 Blend 在哪里公开了Canvas.Left我的 XAML 中设置的属性。它在哪里?这是“可混合”吗?

4

1 回答 1

0

据我所知,这是不可能的。附加属性没有显示在 Blend 中,因为太多了。当一个元素直接放置在画布左侧并显示顶部属性时,但不可能使所有附加属性都可用。例如,如果您设置属性的元素不在画布内,您可以设置 Canvas.Left 属性。

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

于 2013-01-29T14:26:41.653 回答