Мужики, вопросец возник (не критичный, но перспективный), может кто кинет мысль, плиз!
Вот есть у меня форма с гридом, там контролы для фильтра. На моём монике (wide) их удобно сунуть в панель слева и разместить в стопку, но есть клиенты с 17" "квадратами", где панель лучше разместить сверху и контролы — в линейку. Сам вопрос: можно ли как-то заменить "лэйаут" на лету? Скажем, StackPanel на WrapPanel (а контролы оставить все те же). Конечно, лучше до показа формы, чтобы не было дёрганий.
Спасибо за любые предложения!
Здравствуйте, matumba, Вы писали:
M>Мужики, вопросец возник (не критичный, но перспективный), может кто кинет мысль, плиз!
M>Вот есть у меня форма с гридом, там контролы для фильтра. На моём монике (wide) их удобно сунуть в панель слева и разместить в стопку, но есть клиенты с 17" "квадратами", где панель лучше разместить сверху и контролы — в линейку. Сам вопрос: можно ли как-то заменить "лэйаут" на лету? Скажем, StackPanel на WrapPanel (а контролы оставить все те же). Конечно, лучше до показа формы, чтобы не было дёрганий.
M>Спасибо за любые предложения!
В приложении
photoSuru это сделано — разметка меняется в зависимости от размера окна.
Здравствуйте, 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 (и наеборот). У них же ретемплится целый контрол — не дофига ли? (это целая страница, между прочим)
Здравствуйте, 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-а. Если это не существенно, то с панелью ты вроде всё правильно понял