Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 90
WPF

Как сделать статическое положение элементов управления на форме?

13.04.2019, 15:05. Показов 2509. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть форма с фоном из картинки и на не элементы управления.
они расположены на нужный местах картинки поэтому небольшой сдвиг портит картинку в целом.
в редакторе формы выставил как надо.
по после запуска программы элементы съезжают и уменьшаются/увеличиваются.
в начале я решил это убрав верхнюю панель ( где кнопка свернуть, закрыть и тд.)
но сейчас она нужна так как из-за без нее не подвинуть окно программы.
и вот как бы решить эту проблему?
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
<Window x:Class="PAMT.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:PAMT"
        mc:Ignorable="d"
        Title="MainWindow" Height="550" Width="850" VerticalAlignment="Center" WindowStyle="ToolWindow" ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
    <Window.Background>
        <ImageBrush ImageSource="Resources/2.jpg"/>
    </Window.Background>
 
    <Grid>
        <TextBox x:Name="tb1" HorizontalAlignment="Left" Height="125" Margin="77,375,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="114" Foreground="#FF28D432">
            <TextBox.Background>
                <ImageBrush/>
            </TextBox.Background>
        </TextBox>
        <Button Content="Ответить" Margin="299,18,0,0" Click="Button_Click" Foreground="#FF28D334" HorizontalAlignment="Left" VerticalAlignment="Top" Height="46" Width="262">
            <Button.Background>
                <ImageBrush/>
            </Button.Background>
        </Button>
        <TextBox x:Name="tb2" HorizontalAlignment="Left" Height="72" Margin="308,303,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="231" Foreground="#FF32DD3F">
            <TextBox.Background>
                <ImageBrush/>
            </TextBox.Background>
        </TextBox>
        <TextBox x:Name="tb3" HorizontalAlignment="Left" Height="121" Margin="638,375,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="118" Foreground="#FF28D334">
            <TextBox.Background>
                <ImageBrush/>
            </TextBox.Background>
        </TextBox>
        <TextBox x:Name="tb4" HorizontalAlignment="Left" Height="90" Margin="281,186,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="280" Foreground="#FF28D432">
            <TextBox.Background>
                <ImageBrush/>
            </TextBox.Background>
        </TextBox>
        <Label Content="Правильный ответ" HorizontalAlignment="Left" Margin="364,159,0,0" VerticalAlignment="Top" FontFamily="Comic Sans MS" Foreground="#FFE8FF00"/>
        <Label Content="Player1" HorizontalAlignment="Left" Margin="106,348,0,0" VerticalAlignment="Top" FontFamily="Comic Sans MS" Foreground="#FFE8FF00"/>
        <Label Content="Player2" HorizontalAlignment="Left" Margin="671,348,0,0" VerticalAlignment="Top" FontFamily="Comic Sans MS" Foreground="#FFE8FF00"/>
        <Label Content="Вопрос" HorizontalAlignment="Left" Margin="392,276,0,0" VerticalAlignment="Top" FontFamily="Comic Sans MS" Foreground="#FFE8FF00"/>
        <Button Content="Выход" HorizontalAlignment="Left" Height="34" Margin="787,11,0,0" VerticalAlignment="Top" Width="47" Foreground="#FF2DDE39" Click="Button_Click_1">
            <Button.Background>
                <ImageBrush/>
            </Button.Background>
        </Button>
        <RadioButton x:Name="rb1" Content="Player1" HorizontalAlignment="Left" Margin="24,18,0,0" VerticalAlignment="Top" Foreground="#FFE8FF00" Checked="Rb1_Checked"/>
        <RadioButton x:Name="rb2" Content="Player2" HorizontalAlignment="Left" Margin="24,44,0,0" VerticalAlignment="Top" Foreground="#FFE8FF00" Checked="Rb2_Checked"/>
 
    </Grid>
</Window>
ниже скрины что в редакторе и что после запуска
заранее спасибо.
Миниатюры
Как сделать статическое положение элементов управления на форме?   Как сделать статическое положение элементов управления на форме?  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.04.2019, 15:05
Ответы с готовыми решениями:

Как сделать простейшую систему управления обьектом на форме
Я делаю игру в котором летит вертолет(в 2d), но летает он у меня только по заданным параметрам( void __fastcall TForm1::Timer1Timer(TObject...

Как запретить наследование элементов управления на форме
Добрый день, вот столкнулся с такой проблемой. У меня, при нажатии на кнопку, появляется еще одна форма, новая форма наследуется от...

Как сделать чтобы панели элементов управления находились "элементы управления" нужного формата?
По умолчанию формат &quot;элемента управления&quot; &quot;Поле&quot;: высота - 0,556 см; ширина - 3,0 см; шрифт - 11. Как сделать чтобы по...

5
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16129 / 11253 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
13.04.2019, 15:38
Максмм, Margin - это свойство для задания расстояния между элементами и не надо его использовать для позиционирования элементов! Это частая ошибка, но тем не менее это ОШИБКА!

Для решения Вашей проблемы используйте вместо панели Grid панель Canvas и фон устанавливайте не у окна, а этой панели Canvas.

Но при разных разрешениях экрана, возможно, всё равно положения элементов по отношению к фону будут слегка плыть. Если такое будет - напишите. Тогда подскажу белее сложную реализацию, но лучше адаптирующююся.

Добавлено через 9 минут
Есть ещё нюанс. Реальный размер элементов в конструкторе, режиме Debag, в режиме Relase может слегка меняться. А так как картинка растягивается по размеру, а позиции заданны жёстко, то элементы относительно картинки могут смещаться.
0
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 90
13.04.2019, 15:42  [ТС]
Так вижуалка же сама прописывает margin стоит только мне подвинуть элемент
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16129 / 11253 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
13.04.2019, 15:46
Цитата Сообщение от Максмм Посмотреть сообщение
Так вижуалка же сама прописывает margin стоит только мне подвинуть элемент
Прочитайте "WPF vs WinForms (для начинающих)" в цикле Готовые решения, примеры и рекомендации начинающим на WPF [Элд Хасп]

Добавлено через 2 минуты
Измените тип панели на Canvas, тогда редактор будет использовать свойства Top и Left вместо Margin.
0
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 90
13.04.2019, 15:55  [ТС]
Поменял на Canvas убрал все margin и теперь везде top left но все равно съезжает
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16129 / 11253 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
13.04.2019, 18:54
Цитата Сообщение от Максмм Посмотреть сообщение
Поменял на Canvas убрал все margin и теперь везде top left но все равно съезжает
В режиме Relase проверяли?

Добавлено через 8 минут
По Феншую надо делать такую реализацию:
  • Основной контейнер ViewBox.
  • В него вложен Canvas.
  • В Canvas вкладывает картинку. Именно вкладываете - элемент Image, а не свойство Background.
  • Поверх него расставляете все элементы.

В такой реализации внешние размеры будут определяться размерами ViewBox. А внутренние будут жёстко зафиксированы.

Так же, возможно, потребуется сделать Canvas по размерам один в один с размерами карnинки. Это чтобы не было, возможных, искажений преобразования. Но сначала попробуйте без этого.

Добавлено через 1 минуту
Если не получится скиньте ещё раз - попробую сам сделать.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.04.2019, 18:54
Помогаю со студенческими работами здесь

Как объединить элементы на форме в один массив элементов управления
Проблема такая. На форме есть например 5 элементов label: label1, label2,label3,label4,label5. Хотелось бы как то обращаться к ним в...

Размеры и положение элементов на форме
Доброго времени. Подскажите, как реализовать динамическое изменение положения и размера элементов на форме? Это встречается,...

Не получается изменить положение элементов на форме
Помогите, пожалуйста, изменить положение элемента на форме..:D Пробовал так: m_textEdit = new QTextEdit(); ...

Как создать статическое окно управления "static" с текстом
hwndStaticWindow=CreateWindow(&quot;static&quot;,&quot;Tekst Tekst&quot;, WS_CHILD | WS_VISIBLE | SS_BLACKFRAME, 10,110,490,30, ...

Смена положение элементов на форме путем нажатия клавишь
Очень простой вопрос, но я не могу вспомнить как это сделать. А именно. В проекте ASP.NET WebApplication можно &quot;натаскивать&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru