WPF ControlTemplate с foreach? - PullRequest
       15

WPF ControlTemplate с foreach?

0 голосов
/ 24 августа 2009

В настоящее время я пытаюсь создать классы для WPF-приложения, подобного рисованию. Мне нужно базовые классы LineMovement (линия от StartPoint до EndPoint) и PathMovement (линия, проходящая через все точки, указанные в свойстве Points типа PointCollection). Эти классы наследуются от Control и получают свой внешний вид через ControlTemplate.

Теперь я хочу добавить (что я называю) PointMovers к ControlTemplate. Это должны быть маленькие визуальные элементы, находящиеся в каждой из точек в любом из классов Движения. Они должны стать своего рода механизмом захвата, чтобы перетаскивать нижележащую точку вокруг.

Проблема, конечно, в том, что я не знаю, как создать переменное число элементов в шаблоне ControlTemplate. Было бы здорово, если бы я мог сделать что-то вроде этого:

<Style x:Key="{x:Type mov:PathMovement}" TargetType="{x:Type mov:PathMovement}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type mov:PathMovement}">
                <Grid>
                    <Polyline Points="{TemplateBinding Points}" />
                    <!-- interesting part start -->
                    <foreach loopvariable="Point" in="{TemplateBinding Points}">
                        <PointMover Point="Point" />
                    </foreach>
                    <!-- interesting part end -->
                </Grid>
           </ControlTemplate>
       </Setter.Value>
  </Setter>
</Style>

Возможно ли это? У вас есть другой подход, который может сработать?

Заранее спасибо!

1 Ответ

1 голос
/ 24 августа 2009

Используйте ItemsControl в сочетании с ItemTemplate:

<ItemsControl ItemsSource="{Binding Points}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <!-- rendered for each point -->
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Судя по звукам вашего варианта использования, вы также можете прочитать о AdornerLayer с.

...