powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Предугадать размер контрола до рендеринга
25 сообщений из 59, страница 1 из 3
Предугадать размер контрола до рендеринга
    #39617938
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, посоветуйте пожалуйста, как лучше поступить.
Есть ItemsControl, в котором при ситуации когда нельзя отобразить все элементы на экране, нужно формировать новую "порцию" элементов и показывать их по очереди с таймером, так чтобы они все влезли на экран. Высота каждого элемента ItemsControl может быть разной.
Что сделал: обернул itemscontrol в ScrollViewer и сравниваю ViewportHeight от ScrollViewer и ActualHeight от ItemsControl, когда разница между ними появляется, соответственно элемент не влез и будет показан не полностью без прокрутки ScrollViewer.
Вопрос: при "поштучном" добавлении элементов в ViewModel для ItemsControl.itemsource, можно ли узнать, что добавление этого элемента приведет к включению скролла и он не влезет в Viewport. Гугл говорит, что можно это узнать только по факту после рендеринга, то есть нужно сначала добавить, прорисовать, получить размер, и если не хватает высоты, то удаляем элемент. Хотелось бы избежать такой стратегии добавлении. Спасибо
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39617945
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subнужно формировать новую "порцию" элементов и показывать их по очереди с таймером, так чтобы они все влезли на экран.если не влезает, в верстке сдвиг и скроллинг по умолчанию.
Т.е. если я повернул экран на 90 град будут папап окна мелькать?
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39617946
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subнужно формировать новую "порцию" элементов и показывать их по очереди с таймером, так чтобы они все влезли на экран.если не влезает, в верстке сдвиг и скроллинг по умолчанию.
Т.е. если я повернул экран на 90 град будут папап окна мелькать?
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39617963
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
папап меню никаких нет, задача показать ровно столько элементов, которые влезут без скролла, т.к. у пользователя не будет возможности скроллировать, а просмотреть все элементы нужно То есть, если например при обычной ориентации влезает 5 элементов, разворачиваем на 90 экран делается выше и соответственно влезет больше элементов.
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39617976
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,
И экран размер может быть любой?
Иначе просто верстка для определенного экрана с поворотом туда сюда.
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39617977
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
экран фиксированный. В принципе от размера экрана не должно зависеть- есть же ActualHeight и ViewportHeight, нужно их просто мониторить.
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39617979
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subнужно их просто мониторить.нет.
Если фиксированный, то просто выбрать правильную верстку. Чтобы контекст перетекал из горизонтали в вертикаль.
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39617985
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
вертикали тоже не хватит.
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39617986
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Вы про что-то вроде wrap панели.
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39617987
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subPetro123,
вертикали тоже не хватит.тогда в Layouts контроле делаешь все остальные заранее мультимедиа прыгающие.
Какие не влазят покажет IDE прямо счас.
Вычислять не надо.
Надо дизайн формы делать.
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39617989
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subЕсли Вы про что-то вроде wrap панели.в андроид студии есть кнопка Повернуть экран. И все видно сразу.
Тут не подскажу. Жди профи.
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39617998
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
что-то я все равно не могу понять, как я их заранее разобью все элементы, не знаю сколько они будут места занимать.
То есть у меня например максимум на всем экране (горизонталь+ вертикаль- все заполнено) в ItemControl'e поместится например 10 элементов. Если их размер будет другой поместится максимум 5. А нужно показать 100 и без скроллинга- то есть нужно или делать меньше все элементы или автопрокрутку - но это то еще удовольствие.
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39618008
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subне знаю сколько они будут места занимать.
Открой xaml и слева внизу поставь 100%
Виден реальный размер.
Включи свойства Контрол-layout там цифры.
?
Т.е. ты заранее видишь что не влазит.
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39618011
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subЕсли их размер будет другойу каждого контрола есть свой layout.
Поставь там вписать.
И дай скрины что за 100 элементов?
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39618013
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subА нужно показать 100 и без скроллинга-а миллион без скроллинга? Предел есть?
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39618016
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,
Даю решение по дизайну.
Ставим полосу из точек 3х3пикселя на 100 контролов.
При MouseMove над точкой показываем сам контрол.
Всё.
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39618026
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subЕсть ItemsControl, в котором при ситуации когда нельзя отобразить все элементы на экране, нужно формировать новую "порцию" элементов и показывать их по очереди с таймером, так чтобы они все влезли на экран. Высота каждого элемента ItemsControl может быть разной.Я не очень понял задачу. Допустим есть 15 элементов и есть некий размер области, в которой поместится 5, затем 3, затем 7 элементов. Ты хочешь сделать, чтобы каждую секунду эти группы элементов менялись на следующую, так? Тогда не очень понимаю, причем тут ItemsControl, тут на первый взгляд больше задача для кастомной панели, или же я неверно понимаю, что требуется.
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39618028
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

В Window один элемент
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
 <ItemsControl   Style="{StaticResource ItemsControlStyleMainViewFirst}"/>

сами стили
 <Style x:Key="ItemsControlStyleMainViewFirst"
           BasedOn="{StaticResource BaseItemsControlStyle}"
           TargetType="{x:Type ItemsControl}" >
        <Style.Resources>
            <DataTemplate x:Key="InfoTemplate" DataType="{x:Type m:InfoItem}">
                <DataTemplate.Resources>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="VerticalAlignment" Value="Center" />
                        <Setter Property="HorizontalAlignment" Value="Center" />
                        <Setter Property="Margin" Value="3 0 3 0"/>
                    </Style>
                </DataTemplate.Resources>
                <Border BorderBrush="Azure" BorderThickness="0.5"  Margin="0 2 0 2" CornerRadius="0">
                    <StackPanel Orientation="Horizontal"  >


                        <Grid Margin="10 0 10 0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition  SharedSizeGroup="col2" />
                            </Grid.ColumnDefinitions>
                            <TextBlock  Text="{Binding person.nWindow,IsAsync=True}" FontSize="80"/>
                        </Grid>

                        <Grid >
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition SharedSizeGroup="col3" />
                            </Grid.ColumnDefinitions>
                            <TextBlock  Text="{Binding person.F,IsAsync=True}"   Foreground="DarkSalmon"  />
                        </Grid>

                        <Grid   VerticalAlignment="Center">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition SharedSizeGroup="col4" />
                            </Grid.ColumnDefinitions>
                            <ItemsControl  Style="{StaticResource fltItemscontrolStyle}"/>
                        </Grid>
                    </StackPanel>

                </Border>
            </DataTemplate>
        </Style.Resources>

        <Setter Property="Grid.IsSharedSizeScope" Value="True"/>
        <Setter Property="ItemsSource" Value="{Binding infoListFirst,IsAsync=True}"/>
        <Setter Property="ItemTemplate" Value="{StaticResource InfoTemplate}"/>
   
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ItemsControl}">
                    <ItemsPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

 <Style  x:Key="fltItemscontrolStyle"
        BasedOn="{StaticResource BaseItemsControlStyle}"
        TargetType="{x:Type ItemsControl}">
        <Style.Resources>
            
            <DataTemplate x:Key="fltTemplate" DataType="{x:Type m:InfoFlt}">
                <DataTemplate.Resources>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="VerticalAlignment" Value="Center" />
                        <Setter Property="HorizontalAlignment" Value="Center" />
                        <Setter Property="Margin" Value="3 0 3 0"/>
                        <Setter Property="HorizontalAlignment" Value="Center" />
                        <Setter Property="VerticalAlignment" Value="Center"/>
                    </Style>
                </DataTemplate.Resources>


                <StackPanel Orientation="Horizontal"  Margin="0 2 2 0">
                    <Grid Margin="10 0 0 0">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition  SharedSizeGroup="col1Detail" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding nf,IsAsync=True}"  />
                    </Grid>

                    <Grid Margin="10 0 0 0">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition  SharedSizeGroup="col2Detail" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding cac,IsAsync=True}" FontStyle="Italic" Foreground="DarkSalmon" />
                    </Grid>

                    <Grid Margin="10 0 0 0">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition  SharedSizeGroup="col3Detail" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding ddep,IsAsync=True,StringFormat=HH:mm}" />
                    </Grid>

                    <Grid Margin="5 0 0 0">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition  SharedSizeGroup="col4Detail" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding workShopLeave,IsAsync=True,StringFormat=HH:mm}" />
                    </Grid>

                    <Grid >
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition  SharedSizeGroup="col5Detail" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding IsFridgeReady,IsAsync=True}" />
                    </Grid>

                </StackPanel>
            </DataTemplate>
        </Style.Resources>
        
        <Setter Property="Grid.IsSharedSizeScope" Value="False"/>
        <Setter Property="ItemTemplate" Value="{StaticResource fltTemplate}"/>
        <Setter Property="ItemsSource" Value="{Binding person.list,IsAsync=True}"/>

    </Style>



ввиду того, что

Код: xml
1.
2.
3.
4.
5.
6.
       <Grid   VerticalAlignment="Center">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition SharedSizeGroup="col4" />
                            </Grid.ColumnDefinitions>
                            <ItemsControl  Style="{StaticResource fltItemscontrolStyle}"/>
                        </Grid>



количество элементов в ItemsControl может быть разное, родительский InfoTemplate тоже растягивается по высоте, поэтому я не могу в статике замерять его высоту. В вышеприведенном <ItemsControl Style="{StaticResource fltItemscontrolStyle}"/> может быть как 1 элемент, так и >1.
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39618038
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,
Сначала задачу понять надо.
1. Что за элемент с непредсказуемым контентом который надо вписать?
2. Используй вписать вместо заполнить всё доступное.
3. Моё ТЗ с превью контролов маленькими подходит?
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39618073
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Provb_subЕсть ItemsControl, в котором при ситуации когда нельзя отобразить все элементы на экране, нужно формировать новую "порцию" элементов и показывать их по очереди с таймером, так чтобы они все влезли на экран. Высота каждого элемента ItemsControl может быть разной.Я не очень понял задачу. Допустим есть 15 элементов и есть некий размер области, в которой поместится 5, затем 3, затем 7 элементов. Ты хочешь сделать, чтобы каждую секунду эти группы элементов менялись на следующую, так? Тогда не очень понимаю, причем тут ItemsControl, тут на первый взгляд больше задача для кастомной панели, или же я неверно понимаю, что требуется.vb_subможно это узнать только по факту после рендеринга, то есть нужно сначала добавить, прорисовать, получить размер, и если не хватает высоты, то удаляем элемент.Как раз-таки в варианте с панелью нам не нужно ничего прорисовывать, чтобы узнать размер элемента, для этого существует "измерение"
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39618104
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProКак раз-таки в варианте с панелью нам не нужно ничего прорисовывать, чтобы узнать размер элемента, для этого существует "измерение"И панель как раз-таки можно встроить ItemsControl.ItemsPanelTemplate, чтобы получить доступ к прибайнденным элементам
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39618110
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
1)немного акварели
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39618127
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
2) если вписывать, то прийдется как я понимаю зумить размеры в меньшую сторону.
3) пока еще не успел проработать
На картинке в экран помещается 5 элементов, а показать например нужно 100 (это все условно для примера- не в количестве дело), причем высота каждого разная - в зависимости от количества элементов внутреннего ItemsControl- как видно из картинки может быть 1,2,3,4,5- соответственно высота каждого элемента- разная.
Я хочу проработать следующую ситуацию-во внешний itemsScontrol (ItemsControlStyleMainViewFirst) загружено 4 элемента, я хочу проверить - влезет ли 5-й элемент в этот же экран, если не влезет то разбиваю всю коллекцию элементов на 2 части и показываю их по очереди с таймером.
На картинке в данном случае 5-й элемент(Ник**ин) поместился на экран, но если бы в 5-м элементе во внутреннем itemsScontrol (fltItemscontrolStyle) было бы не 4 элемента, а 5, то весь 5-й элемент бы не поместился и соответственно его нужно переносить в следующую порцию. Вот я хочу детектировать во ViewModel это событие, когда следующий элемент не поместится на экран.
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39618133
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,
Остальные 95 по таймеру хочешь мельтешить на экране?
...
Рейтинг: 0 / 0
Предугадать размер контрола до рендеринга
    #39618134
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,
Поставь буквы алфавита и мышкой показывать.
У тебя юз кейс фотогалерии из 100 фотографий)
...
Рейтинг: 0 / 0
25 сообщений из 59, страница 1 из 3
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Предугадать размер контрола до рендеринга
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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