我有一个项目,我使用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'吗?
答案 0 :(得分:0)
据我所知,这是不可能的。 Blend中没有显示Attached properties,因为它太多了。将元素直接放置在画布左侧并显示顶部属性时,将无法使所有附加属性可用。例如,如果设置属性的元素不在画布中,则可以设置Canvas.Left属性。
设置附加属性的唯一方法是在Xaml中手动执行。