Как я могу добавить один экземпляр элемента управления в ItemsPanelTemplate? - PullRequest
1 голос
/ 27 февраля 2012

В моем проекте у меня есть ItemsControl, который имеет ItemsPanel шаблон Grid. Я хотел бы добавить один элемент управления с этой сеткой, полностью независимый от ItemsControl 'Items' , к которому можно получить доступ в коде. Каков наилучший способ сделать это?

Подробнее:

Я реализую временную шкалу анимации ключевых кадров в WPF.Я делаю это, имея набор «индикаторов», который связан с ItemsControl;Затем ItemsControl размещает каждый из них на сетке в соответствии с их положением, используя свойство Margin:

    <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 предоставляют «окно», мне нужно добавить элемент управления таким образом, чтобы к нему применялись преобразования контейнеров (т. е. брат или потомоксетка)

Как мне изменить мой ItemsTemplate, чтобы он создавал один элемент управления (рамка / прямоугольник / и т. д.), независимый от элементов?

1 Ответ

1 голос
/ 27 февраля 2012

Вы не можете изменить дочерние элементы панели, используемые как ItemsPanelTemplate

. Вместо этого я обычно помещаю элемент ItemsControl и оверлей в панель, позволяющую перекрывать дочерние элементы,такие как Grid

Например,

<ScrollViewer Name="timelineScrollViewer" ...>
    <Grid>

        <ItemsControl Name="KeyGridPresenter" ... >

        </ItemsControl>

        <Grid x:Name="SomethingDrawnOnTopOfItemsControl">
            ...
        </Grid>

    </Grid>
 </ScrollViewer>
...