在我的项目中,我有一个ItemsControl
,其ItemsPanel
模板为Grid
。 我想在此网格中添加一个控件,完全独立于ItemsControl'Items',可以在代码隐藏中访问。 这样做的最佳方式是什么?
更多细节:
我正在WPF中实现一个关键帧动画时间轴。我通过一组绑定到ItemsControl的“指标”来做到这一点;然后ItemsControl使用Margin属性根据它们的位置将每个这些位置放在Grid上:
<DataTemplate x:Key="keyIndicatorTemplate">
<Border Width="1" Height="1"
BorderBrush="Black" Background="Black" BorderThickness="0"
HorizontalAlignment="Left" VerticalAlignment="Top"
Margin="{Binding Converter={StaticResource ResourceKey=keyIndicatorMarginConv}}"
></Border>
</DataTemplate>
然后,这个指标网格自动调整到关键帧的大小,并使用ItemsControl LayoutTransform属性和包含的ScrollViewer进行缩放和平移:
<Grid>
<ScrollViewer Name="timelineScrollViewer" Background="LightCyan" HorizontalScrollBarVisibility="Visible">
<ItemsControl Name="KeyGridPresenter" ItemTemplate="{StaticResource ResourceKey=keyIndicatorTemplate}" >
<ItemsControl.LayoutTransform>
<ScaleTransform
ScaleX="{Binding Path=ZoomX, ElementName=TimelineUserControl}"
ScaleY="{Binding Path=ZoomY, ElementName=TimelineUserControl}">
</ScaleTransform>
</ItemsControl.LayoutTransform>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid Name="KeyGrid">
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
</Grid>
我想添加一个用户用鼠标控制的半透明“荧光笔/插入符号”,但由于此设计基于网格是ItemsControl
和{{ScrollViewer
和{{ 1}}提供一个'窗口',我需要添加控件,使容器的变换适用于它(即网格的兄弟或子节点)
如何修改我的ItemsTemplate
,以便它实例化一个单独的控件(边框/矩形/等),与项目无关?
答案 0 :(得分:1)
您无法修改用作ItemsPanelTemplate
我通常做的是将ItemsControl
和叠加控件放在允许其子项重叠的面板中,例如Grid
例如,
<ScrollViewer Name="timelineScrollViewer" ...>
<Grid>
<ItemsControl Name="KeyGridPresenter" ... >
</ItemsControl>
<Grid x:Name="SomethingDrawnOnTopOfItemsControl">
...
</Grid>
</Grid>
</ScrollViewer>