Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Предугадать размер контрола до рендеринга / 25 сообщений из 59, страница 1 из 3
21.03.2018, 08:50
    #39617938
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
Всем привет, посоветуйте пожалуйста, как лучше поступить.
Есть ItemsControl, в котором при ситуации когда нельзя отобразить все элементы на экране, нужно формировать новую "порцию" элементов и показывать их по очереди с таймером, так чтобы они все влезли на экран. Высота каждого элемента ItemsControl может быть разной.
Что сделал: обернул itemscontrol в ScrollViewer и сравниваю ViewportHeight от ScrollViewer и ActualHeight от ItemsControl, когда разница между ними появляется, соответственно элемент не влез и будет показан не полностью без прокрутки ScrollViewer.
Вопрос: при "поштучном" добавлении элементов в ViewModel для ItemsControl.itemsource, можно ли узнать, что добавление этого элемента приведет к включению скролла и он не влезет в Viewport. Гугл говорит, что можно это узнать только по факту после рендеринга, то есть нужно сначала добавить, прорисовать, получить размер, и если не хватает высоты, то удаляем элемент. Хотелось бы избежать такой стратегии добавлении. Спасибо
...
Рейтинг: 0 / 0
21.03.2018, 09:06
    #39617945
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
vb_subнужно формировать новую "порцию" элементов и показывать их по очереди с таймером, так чтобы они все влезли на экран.если не влезает, в верстке сдвиг и скроллинг по умолчанию.
Т.е. если я повернул экран на 90 град будут папап окна мелькать?
...
Рейтинг: 0 / 0
21.03.2018, 09:07
    #39617946
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
vb_subнужно формировать новую "порцию" элементов и показывать их по очереди с таймером, так чтобы они все влезли на экран.если не влезает, в верстке сдвиг и скроллинг по умолчанию.
Т.е. если я повернул экран на 90 град будут папап окна мелькать?
...
Рейтинг: 0 / 0
21.03.2018, 09:41
    #39617963
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
Petro123,
папап меню никаких нет, задача показать ровно столько элементов, которые влезут без скролла, т.к. у пользователя не будет возможности скроллировать, а просмотреть все элементы нужно То есть, если например при обычной ориентации влезает 5 элементов, разворачиваем на 90 экран делается выше и соответственно влезет больше элементов.
...
Рейтинг: 0 / 0
21.03.2018, 10:00
    #39617976
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
vb_sub,
И экран размер может быть любой?
Иначе просто верстка для определенного экрана с поворотом туда сюда.
...
Рейтинг: 0 / 0
21.03.2018, 10:01
    #39617977
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
Petro123,
экран фиксированный. В принципе от размера экрана не должно зависеть- есть же ActualHeight и ViewportHeight, нужно их просто мониторить.
...
Рейтинг: 0 / 0
21.03.2018, 10:04
    #39617979
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
vb_subнужно их просто мониторить.нет.
Если фиксированный, то просто выбрать правильную верстку. Чтобы контекст перетекал из горизонтали в вертикаль.
...
Рейтинг: 0 / 0
21.03.2018, 10:08
    #39617985
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
Petro123,
вертикали тоже не хватит.
...
Рейтинг: 0 / 0
21.03.2018, 10:08
    #39617986
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
Если Вы про что-то вроде wrap панели.
...
Рейтинг: 0 / 0
21.03.2018, 10:10
    #39617987
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
vb_subPetro123,
вертикали тоже не хватит.тогда в Layouts контроле делаешь все остальные заранее мультимедиа прыгающие.
Какие не влазят покажет IDE прямо счас.
Вычислять не надо.
Надо дизайн формы делать.
...
Рейтинг: 0 / 0
21.03.2018, 10:12
    #39617989
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
vb_subЕсли Вы про что-то вроде wrap панели.в андроид студии есть кнопка Повернуть экран. И все видно сразу.
Тут не подскажу. Жди профи.
...
Рейтинг: 0 / 0
21.03.2018, 10:23
    #39617998
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
Petro123,
что-то я все равно не могу понять, как я их заранее разобью все элементы, не знаю сколько они будут места занимать.
То есть у меня например максимум на всем экране (горизонталь+ вертикаль- все заполнено) в ItemControl'e поместится например 10 элементов. Если их размер будет другой поместится максимум 5. А нужно показать 100 и без скроллинга- то есть нужно или делать меньше все элементы или автопрокрутку - но это то еще удовольствие.
...
Рейтинг: 0 / 0
21.03.2018, 10:34
    #39618008
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
vb_subне знаю сколько они будут места занимать.
Открой xaml и слева внизу поставь 100%
Виден реальный размер.
Включи свойства Контрол-layout там цифры.
?
Т.е. ты заранее видишь что не влазит.
...
Рейтинг: 0 / 0
21.03.2018, 10:39
    #39618011
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
vb_subЕсли их размер будет другойу каждого контрола есть свой layout.
Поставь там вписать.
И дай скрины что за 100 элементов?
...
Рейтинг: 0 / 0
21.03.2018, 10:41
    #39618013
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
vb_subА нужно показать 100 и без скроллинга-а миллион без скроллинга? Предел есть?
...
Рейтинг: 0 / 0
21.03.2018, 10:44
    #39618016
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
vb_sub,
Даю решение по дизайну.
Ставим полосу из точек 3х3пикселя на 100 контролов.
При MouseMove над точкой показываем сам контрол.
Всё.
...
Рейтинг: 0 / 0
21.03.2018, 11:03
    #39618026
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
vb_subЕсть ItemsControl, в котором при ситуации когда нельзя отобразить все элементы на экране, нужно формировать новую "порцию" элементов и показывать их по очереди с таймером, так чтобы они все влезли на экран. Высота каждого элемента ItemsControl может быть разной.Я не очень понял задачу. Допустим есть 15 элементов и есть некий размер области, в которой поместится 5, затем 3, затем 7 элементов. Ты хочешь сделать, чтобы каждую секунду эти группы элементов менялись на следующую, так? Тогда не очень понимаю, причем тут ItemsControl, тут на первый взгляд больше задача для кастомной панели, или же я неверно понимаю, что требуется.
...
Рейтинг: 0 / 0
21.03.2018, 11:07
    #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
21.03.2018, 11:21
    #39618038
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
vb_sub,
Сначала задачу понять надо.
1. Что за элемент с непредсказуемым контентом который надо вписать?
2. Используй вписать вместо заполнить всё доступное.
3. Моё ТЗ с превью контролов маленькими подходит?
...
Рейтинг: 0 / 0
21.03.2018, 12:07
    #39618073
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
Shocker.Provb_subЕсть ItemsControl, в котором при ситуации когда нельзя отобразить все элементы на экране, нужно формировать новую "порцию" элементов и показывать их по очереди с таймером, так чтобы они все влезли на экран. Высота каждого элемента ItemsControl может быть разной.Я не очень понял задачу. Допустим есть 15 элементов и есть некий размер области, в которой поместится 5, затем 3, затем 7 элементов. Ты хочешь сделать, чтобы каждую секунду эти группы элементов менялись на следующую, так? Тогда не очень понимаю, причем тут ItemsControl, тут на первый взгляд больше задача для кастомной панели, или же я неверно понимаю, что требуется.vb_subможно это узнать только по факту после рендеринга, то есть нужно сначала добавить, прорисовать, получить размер, и если не хватает высоты, то удаляем элемент.Как раз-таки в варианте с панелью нам не нужно ничего прорисовывать, чтобы узнать размер элемента, для этого существует "измерение"
...
Рейтинг: 0 / 0
21.03.2018, 12:33
    #39618104
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
Shocker.ProКак раз-таки в варианте с панелью нам не нужно ничего прорисовывать, чтобы узнать размер элемента, для этого существует "измерение"И панель как раз-таки можно встроить ItemsControl.ItemsPanelTemplate, чтобы получить доступ к прибайнденным элементам
...
Рейтинг: 0 / 0
21.03.2018, 12:42
    #39618110
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
Petro123,
1)немного акварели
...
Рейтинг: 0 / 0
21.03.2018, 12:55
    #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
21.03.2018, 12:58
    #39618133
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
vb_sub,
Остальные 95 по таймеру хочешь мельтешить на экране?
...
Рейтинг: 0 / 0
21.03.2018, 13:01
    #39618134
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предугадать размер контрола до рендеринга
vb_sub,
Поставь буквы алфавита и мышкой показывать.
У тебя юз кейс фотогалерии из 100 фотографий)
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Предугадать размер контрола до рендеринга / 25 сообщений из 59, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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