Используя WPF, могу ли я (легко) реализовать панель управления, которая позволяет мне отображать один элемент несколько раз? - PullRequest
1 голос
/ 24 марта 2009

Функциональность интерфейса не важна (прямо сейчас) с детьми, но было бы удобно, если бы был какой-то способ сказать, что ребенок может быть и «здесь», и «там», и что его следует рассматривать как один объект.

Я реализую повторяющийся просмотрщик с прокруткой, который обрабатывает свой холст как повторяющуюся плоскость, и я хотел бы иметь возможность интеллектуально повторять дочерние элементы, когда размер, занимаемый всеми отображаемыми объектами, меньше размера панель. То есть, по крайней мере, один элемент будет показан дважды.

AFAIK, это невозможно при использовании наивной панели? Могу ли я использовать какое-то волшебство, чтобы дважды разместить элемент на экране?

Ответы [ 3 ]

1 голос
/ 24 марта 2009

Вы пытались использовать визуальную кисть с мозаикой или если вы хотите иметь возможность позиционировать «зеркальный» элемент независимо, используйте прямоугольник с VisualBrush в качестве заливки.

Я не совсем уверен, что мы находимся здесь на одной дорожке ...

1 голос
/ 24 марта 2009

Я не думаю, что можно визуализировать элемент в двух местах (поскольку каждый элемент отслеживает свой собственный размер / местоположение из прохода Measure / Arrange) Кроме того, вы не можете добавить элемент в качестве ребенка к двум родителям, вы получите исключение.

Подход VisualBrush, вероятно, поможет вам ближе, но, как вы прокомментировали этот ответ, он не является интерактивным. Вы заинтересованы в отображении элементов UIE, или вы привязаны к некоторым данным? Если вы отображаете объект данных, вы всегда можете создать новый ContentPresenter и установить его содержимое для объекта данных. Если вы отображаете UIElement, не уверены, есть ли способ достичь вашей цели.

1 голос
/ 24 марта 2009

Я бы просто использовал два списка с одинаковой информацией. Возможно, я не лучший в исполнении (у меня нет данных за или против), но если вы используете VirtualizingScrollViewer, он будет отображать только то, что видно.

<Window>
  <Window.Resources>
    <local:MyDataSource x:Key="myDataSource" />

    <ItemsPanelTemplate x:Key="stackTemplate">
        <StackPanel IsItemsHost="True" />
    </ItemsPanelTemplate>
  </Window.Resources>
  <Border>

    <ScrollViewer>
      <StackPanel VirtualizingStackPanel.IsVirtualizing="True" DataContext="{StaticResource cusomtersDataSource}">
        <ItemsControl ItemsSource="{Binding Customers}" ItemsPanel="{StaticResource stackTemplate}" />
        <ItemsControl ItemsSource="{Binding Customers}" ItemsPanel="{StaticResource stackTemplate}" />
      </StackPanel>
    </ScrollViewer>
  </Border>
</Window>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...