C # WPF, как программно установить расположение, ширину и высоту элементов управления?

Я делаю свое первое приложение WPF. У меня проблема, из-за которой, когда моя форма развернута или полноэкранна, мои элементы управления не изменяют размер и просто остаются в том же месте. только форма максимизирована.

в winform я могу сделать настройку в .cs следующим образом:

panel6.Width
panel6.Height
panel6.Location

это поможет мне установить его, если моя форма развернута. Я делаю это, используя некоторую арифметику, где я получаю разрешение экрана и некоторые вычисления, получаю значение и могу установить для него ширину, высоту и местоположение. НО ЭТО В WINFORM.

как я решу эту проблему для максимизации и полноэкранного режима в WPF? есть ли способ сделать это через файл .cs программно? или WPF поставляется с простым встроенным элементом управления для решения этой проблемы?

предположим, для этого примера я использую док-панель в WPF.

это будет бессмысленно, если окно развернуто, но другие элементы управления остаются.


person Psychocryo    schedule 10.05.2011    source источник
comment
Поскольку люди упоминают элементы макета в WPF, стоит упомянуть, что вы также можете использовать привязку и стыковку в WinForms, чтобы упростить свою жизнь.   -  person Jaymz    schedule 10.05.2011


Ответы (6)


Чтобы установить Ширина и Высота:

dockpanel1.width = 230;
dockpanel1.height = 230;

что касается местоположения, wpf использует Отступ:

dockpanel1.Margin = new Thickness(0,440,836,40);
person Psychocryo    schedule 11.05.2011
comment
это dockpanel1.Margin = new Thickness(0,440,836,40); выглядит как совершенно неправильный способ дизайна пользовательского интерфейса. Вот несколько приемов для создания надлежащего адаптивного и гибкого дизайна: docs.microsoft.com/en-us/windows/uwp/design/layout/ - person Martin Schneider; 08.06.2018

Можно программно перемещать дочерние элементы на холсте.

В XAML:

<Canvas>
    <YourElement Canvas.Top="x" Canvas.Left="y"/>
</Canvas>

In C#:

Canvas.SetTop(YourElement, newX);
Canvas.SetLeft(YourElement, newY);
person Roger Lew    schedule 16.12.2013
comment
Это более интуитивно понятный способ просто размещать элементы управления и перемещать их. Маржа, кажется, устанавливает вещи относительно других элементов. Это намного сложнее. - person Tim; 24.08.2016

Используйте некоторые вычисления, такие как (предыдущее положение элемента управления * новый размер макета)/предыдущий размер макета = новое положение элемента управления

Но самый простой способ - использовать XAML. Использовать сетку, поместить в нее столбцы и строки и установить размер столбцов и строк на * Таким образом, при изменении размера макета ваши элементы управления будут перемещаться в соответствии с изменением родительского размера, дочерним элементом которого является ваша сетка. Это. И вы даже можете иметь элементы управления с автоматическим изменением размера, просто установив поля элементов управления в столбцах и строках. Не забывайте, что горизонтальное и вертикальное выравнивание установлено на растяжение.

person Eftekhari    schedule 21.07.2014

Для вашей конкретной проблемы рекомендуется использовать DockPanel и поместите в него элементы управления. Вот первый результат Bing: WPF Tutorial | Закрепить панель

И, как уже предложили flq и blinkmeis, изучите макеты панелей. Это значительно упростит вашу жизнь в WPF.

person publicgk    schedule 10.05.2011

вы должны посмотреть на все различные панели макетов в wpf (Grid, DockPanel, StackPanel, Canvas...)

поэтому, если вы установите какие-либо свойства для своей панели, она будет вести себя иначе, если ваша LayoutPanel изменится.

person blindmeis    schedule 10.05.2011

Если вы хотите явно расположить свои дочерние элементы, используйте панель Canvas.

<Canvas>
    <YourElement Canvas.Top="x" Canvas.Left="y"/>
</Canvas>
person Navid Rahmani    schedule 10.06.2011
comment
вы можете... но если кто-то хочет изменить позицию динамически, а не с помощью XAML, сделать это невозможно:].. - person piggy; 26.09.2012