Я делаю программу WPF с текстовым полем, метками и кнопками. С помощью конструктора XAML работает нормально, компоненты отображаются как надо. Но когда я запускаю программу, кажется, что окно укорачивается и обрезает некоторые компоненты по бокам.
Почему компоненты (кнопка и метка) вырезаются только при запуске программы?
Вот код Xaml двух затронутых компонентов:
» BorderBrush=»#FF4EB8CE» FontSize=»14″ Grid.ColumnSpan=»2″ Foreground=»#FF4EB8CE»/>
Они отлично отображаются в редакторе WPF:
Но они обрезаются, когда я запускаю программу:
Gerard Ramon 3 Дек 2019 в 12:04
Поскольку вы никогда не можете доверять дизайнеру XAML, с этими полями, я думаю, вы просто использовали Drag строка заголовка в дизайнере просто немного меньше.
Проблемы, подобные этой, являются одной из многих причин, по которым вы должны быть осторожны при явном размещении пикселей в WPF, и почему вы должны быть особенно осторожны с полями.
WPF
Источник: question-it.com
Почему поля WPF обрезают элемент управления?
См. Обновление У меня есть следующие элементы управления WPF.
Я быстро бросил это вместе в дизайнере Visual Studio 2012. Целевая структура -.Net 4.5, и это окно WPF. Это дополнение к существующему решению. Проблема в том, что если я не удаляю 3-й и 4-й поля (например, Margin = «a, b, c, d», устанавливая c и d в 0), а затем указывая VerticalAlignment=»Top» и » HorizontalAlignment=»Left» элементы управления обрезаются. См. Прилагаемое изображение ниже.
Я могу это исправить, установив поля 0 и установив выравнивание, но я хочу знать, почему это происходит по умолчанию? Я буквально просто тащил и уронил. Элементы управления выглядят нормально в Visual Studio 2012.
Запуск RTM Windows 8. ОБНОВИТЬ Мой вопрос заключается не в том, почему поля теперь работают, а почему раньше не было (я понял, что они, похоже, установлены так, что они обрезают фактический контроль); Я просто спрашиваю, почему эта сложная IDE пушила все это. Это случилось более двух перестроек. Из того, что я помню, это также происходит в Expression Blend. Я проверю дважды.
спросил(а) 2012-11-09T13:06:00+04:00 10 лет, 7 месяцев назад
добавить комментарий
пожаловаться
Когда вы перетаскиваете конструктор, будь он в Visual Studio или Expression blend, дизайнер попытается поместить элемент в точное местоположение, на котором элемент управления был удален на поверхности дизайнера. Когда дизайнер помещает элемент, поля используются для позиционирования элемента управления относительно содержащего элемента.
How to Conditional Render UI Elements in WPF
Что обычно делается при перетаскивании элементов управления на поверхность дизайна, это сброс полей. В Blend и VS вы можете сбросить любой атрибут до своих настроек по умолчанию, щелкнув маленький квадрат в свойствах и выбрав сброс. Согласился, что настройка полей дизайнером немного раздражает; хотя, не совсем уверен, как иначе это будет обрабатываться при использовании визуального конструктора для перетаскивания. Лично я склонен переключаться между рукописным XAML и дизайнером; В последнее время я использую Blend намного больше, так как он может контролировать размещение практически любого элемента в XAML с помощью объектов и панели временной шкалы. На боковой ноте, чтобы очистить безумие Blend XAML, установите расширение XAML Styler для Visual Studio.
ответил(а) 2012-11-11T21:04:00+04:00 10 лет, 7 месяцев назад
Источник: progi.pro
Почему WPF зарезает элементы?
Дизайнер все красиво показывает:
На выходи выглядит так:
Вроде, в XAML ничего криминаль
» DisplayMemberPath=»ProjectName» IsSynchronizedWithCurrentItem=»True» />
Ответы (1 шт):
У WPF всё устроено просто. Когда Grid пытается разместить ваши элементы, он из области, в которой должен быть расположен ваш элемент (если у вас нет ни ColumnDefinitions , ни RowDefinitions , то это весь Grid ) вычитает слева 220 и справа 378, и в этой области пытается разместить элемент.
Если оставшаяся область получается слишком маленькой, то элементу, понятно, даётся очень мало места, и он обрезается в отведённом месте. Вы можете легко увидеть это, потягав окно за правый нижний угол, чтобы оно меняло свои размеры.
Поведение у WinForms, судя по всему, не такое.
В WPF вам очень редко должно хотеться использовать Margin для размещения элементов. Он должен использоваться только по прямому назначению: задавать небольшой визуальный отступ от края положенной области. К сожалению, при использовании встроенного дизайнера Студии расположение элементов часто устанавливается при помощи именно Margin .
Правильный UI пишется на XAML’е вручную. (И если вы думаете, что вначале и через дизайнер покатит, то это не так, пишите вручную сразу.)
Для вашего случая может подойти что-то такое:
Источник: husl.ru