powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Перемещение контролсов в UIElementCollection.
22 сообщений из 22, страница 1 из 1
Перемещение контролсов в UIElementCollection.
    #36915320
Есть Panel, которая содержит в себе определенное количество UserControl'ов, назовем их UCMain. UCMain содержит StackPanel, который в свою очередь содержит n-ое количество Button'ов. Необходимо в Panel поменять местами два UCMain, что-бы в списке поменялись и соответственно поменялись местами визуально. Все это я обеспечил следующем образом:
Код: plaintext
1.
2.
var el = Children[index2];
Children.RemoveAt(index2);
Children.Insert(index1, el); 
Все работает нормально, НО при перемещение у одного из UCMain (у того, который удаляется из списка и потом вставляется в нужное место) пересоздаются все элементы, который он содержит. То-есть все Button'ы создаются заново, что значительно грузит проц. Особенно учитывая то, что Button'ы вовсе не Button'ы, а увесистые UserControl'ы.

Так вот, есть ли более правильный способ перемещения элементов UIElementCollection?
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36915450
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
засуньте их в грид, каждую кнопку в свою строчку
и меняйте программно номер строки Grid.SetRow(ButtonI, 23);
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36915488
Не. Коней на переправе не меняют.
А если и буду менять панель (что достаточно сложно), то на VirtualizingPanel в любом случае.
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36915491
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неожиданный ответ, да еще и в таком тоне, будто я вас что-то заставляю делать
можно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
<StackPanel>
    <Grid>
        <Button1/>
        ...
        <ButtonN/>
    </Grid>
</StackPanel>
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36915500
Я значительно упросил описание системы. Там есть и Drag&Drop и связанная с ним анимация, и много всего прочего. По этому я даже не знаю, можно ли поменять контейнер. Нужно именно в UIElementCollection поменять позиции контролсов, и так что бы он не пересоздавался, а сохранял свое состояние.

P.S. Извиняюсь если мой ответ показался грубым.
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36915502
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда остается сабклассить StackPanel и делать там управление расположением
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36918366
А как ObservableCollection привязать к Grid'у? Что-бы вместе с экземпляром ObservableCollection создавалась срока для Grid'а и туда помешался экземпляр?
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36918629
То есть как поменять тут StackPanel на Grid:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
            <ItemsControl x:Name="StepsContainer"
                                  ItemsSource="{Binding Steps}">
                
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <!-- шаблон контрола -->
                    </DataTemplate>        
                </ItemsControl.ItemTemplate>
                
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel  Background="Transparent"/>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                
                <ItemsControl.Template>
                    <ControlTemplate>
                        <ScrollViewer BorderThickness="0" VerticalScrollBarVisibility="Auto">
                            <ItemsPresenter />
                        </ScrollViewer>
                    </ControlTemplate>
                </ItemsControl.Template>
                
            </ItemsControl>
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36918703
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                           <StackPanel  Background="Transparent">
                                      <Grid/>
                           </StackPanel>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
может быть можно сразу шаблон из Грид-а сделать - попробуйте.
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36918730
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и что-то я не совсем понимаю задачу - button-ы это Steps или нечто внутри Step-а?
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36918782
Steps это ObservableCollection моделей Button'ов, а там в шаблоне собственно представление Button'а. Button это я так для простоты назвал.
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36918798
Вестник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                           <StackPanel  Background="Transparent">
                                      <Grid/>
                           </StackPanel>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
может быть можно сразу шаблон из Грид-а сделать - попробуйте.
Таким образом у Grid'а одна ячейка и все контролсы помешаются в эту ячейку, можете себе представить что из этого получается.
По идее нужно в шаблоне прописать создание новой строки. Как это сделать не пойму. Дизайнер ругается на теги, в теле шаблона, <Grid> и <ColumnDefinitions>.
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36918871
Вот http://ru.efreedom.com/Question/1-691339/WPF-GridViewRowPresenter-%D0%B2-ItemsControl .
Первое решение не подходит. Потому что для каждого контролса создается отдельный Grid. А нужно что бы все контролсы были на одном Grid'е.
Остается сабкласить Grid. Только непонятно каким образом.
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36918877
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТаким образом у Grid'а одна ячейка и все контролсы помешаются в эту ячейкуу грида вы можете создать столько строк, сколько нужно, но привязать это к количеству строк в OC -- простым и ясным способом не получится. как забиндить Grid.Row -- тоже не совсем прозрачно

я бы все таки писал свой StackPanel и пилил MeasureOverride и ArrangeOverride
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36918924
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор___________Steps это ObservableCollection моделей Button'ов
а если просто пересоздать коллекцию (но не элементы), с нужной сортировкой элементов?
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36919116
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

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

мое преложение оспользовать вместо StackPanel что-то другое, как например ListView где можно подменить ItemPanelTemplate

вот так я например вывожу ссылки на документы:

<ListBox x:Name="lbAnketa" Grid.Row="5" Grid.ColumnSpan="5" MinHeight="20">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Background="Transparent"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<HyperlinkButton NavigateUri="{Binding Path=URL}" ToolTipService.ToolTip="{Binding Path=URL}" Content="{Binding Path=Name}" TargetName="_blank" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>



в случае автора, необходимо будет заменить содержимое DataTemplate на к примеру ContentPresenter и в качестве источника подсовывать List<UIElement> который вы можете сортировать как душе угодно.
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36919129
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уТКа,

глаза уже замылились (готовлюсь на MCP Silverlight Development), говорю про ListBox а пишу про ListView.

по сути так же можно поступить и со StackPanel с подсовыванием коллекции контролов которые нужно отобразить, путем формирования нового списка с уже существующими элементами, в любом случае нужно эксперементировать, однозначного ответа пока нету.
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36919283
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уТКанаверное не получится, т.к. может вывалиться ошибка "элемент уже является дочерним для другого элемента".
ну х.з., в моем тесте не вываливается... впрочем, и "увесистые UserControl'ы" (UserControl с 3-4 Button'ами) в описанном автором случае (Children.RemoveAt(index2);Children.Insert(index1, el);) не пересоздаются...

автор, необходимо какое-то репро, т.к. вопрос неясен
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36920789
LRуТКанаверное не получится, т.к. может вывалиться ошибка "элемент уже является дочерним для другого элемента".
ну х.з., в моем тесте не вываливается... впрочем, и "увесистые UserControl'ы" (UserControl с 3-4 Button'ами) в описанном автором случае (Children.RemoveAt(index2);Children.Insert(index1, el);) не пересоздаются...

автор, необходимо какое-то репро, т.к. вопрос неясен
Я немного не так выразился, они не пересоздаются а выгружаются с дерева объектов и снова туда заносятся в результате операций Remove и Insert. Что влечет избыточною нагрузку, которую по идее можно избежать.
Повесь на контролс обработчик события Loaded и понаблюдай что происходит с контролсами.
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36921348
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@автор

Вестникзасуньте их в грид, каждую кнопку в свою строчку
и меняйте программно номер строки Grid.SetRow(ButtonI, 23);
ну если не хотите нагрузки, попробуйте все таки этот вариант, это будет самый щадящий способ с точки зрения нагрузки на процессор, так же будет вполне удобен, просто реализуйте методы и вызывайте в нужный момент.
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36921424
уТКа@автор

Вестникзасуньте их в грид, каждую кнопку в свою строчку
и меняйте программно номер строки Grid.SetRow(ButtonI, 23);
ну если не хотите нагрузки, попробуйте все таки этот вариант, это будет самый щадящий способ с точки зрения нагрузки на процессор, так же будет вполне удобен, просто реализуйте методы и вызывайте в нужный момент.

На Grid заменить, к сожалению, не получится. В шаблоне нельзя создать новые строки при генерации контролсов.
...
Рейтинг: 0 / 0
Перемещение контролсов в UIElementCollection.
    #36922388
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@автор

ну вы же как-то формируете коллекцию контролов?
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Перемещение контролсов в UIElementCollection.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]