[WPF] Динамическая замена Layout
От: matumba  
Дата: 13.04.11 19:28
Оценка:
Мужики, вопросец возник (не критичный, но перспективный), может кто кинет мысль, плиз!
Вот есть у меня форма с гридом, там контролы для фильтра. На моём монике (wide) их удобно сунуть в панель слева и разместить в стопку, но есть клиенты с 17" "квадратами", где панель лучше разместить сверху и контролы — в линейку. Сам вопрос: можно ли как-то заменить "лэйаут" на лету? Скажем, StackPanel на WrapPanel (а контролы оставить все те же). Конечно, лучше до показа формы, чтобы не было дёрганий.
Спасибо за любые предложения!
Re: [WPF] Динамическая замена Layout
От: MxMsk Португалия  
Дата: 13.04.11 19:48
Оценка:
Здравствуйте, matumba, Вы писали:

M>Мужики, вопросец возник (не критичный, но перспективный), может кто кинет мысль, плиз!

M>Вот есть у меня форма с гридом, там контролы для фильтра. На моём монике (wide) их удобно сунуть в панель слева и разместить в стопку, но есть клиенты с 17" "квадратами", где панель лучше разместить сверху и контролы — в линейку. Сам вопрос: можно ли как-то заменить "лэйаут" на лету? Скажем, StackPanel на WrapPanel (а контролы оставить все те же). Конечно, лучше до показа формы, чтобы не было дёрганий.
M>Спасибо за любые предложения!
Положить элементы в ItemsControl и менять динамически ItemsPanel.
Re: [WPF] Динамическая замена Layout
От: Vladek Россия Github
Дата: 14.04.11 18:11
Оценка:
Здравствуйте, matumba, Вы писали:

M>Мужики, вопросец возник (не критичный, но перспективный), может кто кинет мысль, плиз!

M>Вот есть у меня форма с гридом, там контролы для фильтра. На моём монике (wide) их удобно сунуть в панель слева и разместить в стопку, но есть клиенты с 17" "квадратами", где панель лучше разместить сверху и контролы — в линейку. Сам вопрос: можно ли как-то заменить "лэйаут" на лету? Скажем, StackPanel на WrapPanel (а контролы оставить все те же). Конечно, лучше до показа формы, чтобы не было дёрганий.
M>Спасибо за любые предложения!

В приложении photoSuru это сделано — разметка меняется в зависимости от размера окна.
Re[2]: [WPF] Динамическая замена Layout
От: matumba  
Дата: 17.04.11 13:12
Оценка:
Здравствуйте, MxMsk, Вы писали:

MM>Положить элементы в ItemsControl и менять динамически ItemsPanel.


эээ... как-то слишком кратенько звучит. Ну вот у меня уже есть:
<WrapPanel>
   <Button ... />
<WrapPanel>


Мне нужно в ХАМЛе вместо WrapPanel сделать ItemsControl? Допустим. А потом ItemsControl.ItemsPanel — надо ей присвоить WrapPanel/StackPanel?
(увы, чтобы понять ваш ответ, нужно знать решение задачи )
В сети я уже искал решения, некоторые базируются на какой-то там Factory, которая уже признана deprecated (отличная, гибкая технология! ).

Может, мне стоит задать ещё один, наводящий вопрос:
У меня будет одна и та же форма, в одном варианте я хочу WrapPanel над гридом, в другом — StackPanel слева от грида. Как надо правильно — сделать оба контрола (StackPanel и WrapPanel) и кидать их чайлды друг другу или сделать ItemsControl, у которого надо просто менять какое-то хитрое свойство для нового лэйаута и заодно DockPanel.Dock? That's question...

Здравствуйте, Vladek, Вы писали:

> photoSuru


Да, спасибо, глянул — как и все их примеры, либо они примитивны до дебилизма, либо представляют собой свалку всего, что мог напридумывать хелпописатель. Последнее — про photoSuru. Нашёл я у них место, где делается шаблон (SearchListViewTemplate например), но блин... это из пушки по воробьям! (хотя может в WPF иначе и не бывает?... ) Я хочу просто динамический контрол — вместо WrapPanel — StackPanel (и наеборот). У них же ретемплится целый контрол — не дофига ли? (это целая страница, между прочим)
Re[3]: [WPF] Динамическая замена Layout
От: MxMsk Португалия  
Дата: 18.04.11 07:12
Оценка:
Здравствуйте, matumba, Вы писали:

M>Мне нужно в ХАМЛе вместо WrapPanel сделать ItemsControl? Допустим. А потом ItemsControl.ItemsPanel — надо ей присвоить WrapPanel/StackPanel?

M>(увы, чтобы понять ваш ответ, нужно знать решение задачи )
Да, именно так. Не совсем WrapPanel и StackPanel, а ItemsPanelTemplate, содержащий их.

M>Может, мне стоит задать ещё один, наводящий вопрос:

M>У меня будет одна и та же форма, в одном варианте я хочу WrapPanel над гридом, в другом — StackPanel слева от грида. Как надо правильно — сделать оба контрола (StackPanel и WrapPanel) и кидать их чайлды друг другу или сделать ItemsControl, у которого надо просто менять какое-то хитрое свойство для нового лэйаута и заодно DockPanel.Dock? That's question...
И тот и другой способ будут работать. Если не лень, можно перекидывать Children панелей туда сюда. Сэкономишь на одном ItemsControl и ContentPresenter-е для каждого Child-а. Если это не существенно, то с панелью ты вроде всё правильно понял
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.