Текст исчезает при открытии окна

Итак, у меня есть форма для регистрации, и по дизайну она выглядит так:

Текст исчезает при открытии окна

И вот для этого XAML:

<Rectangle x:Name = "signInBox" Fill = "#FF5F5F6E" HorizontalAlignment = "Center" Height = "450" Margin = "0,0,0,0" Stroke = "Black" VerticalAlignment = "Center" Width = "640" StrokeThickness = "3" Visibility = "Visible"/>
<TextBlock x:Name = "signUpText" HorizontalAlignment = "Center" Margin = "0,-350,0,0" TextWrapping = "Wrap" Text = "Sign up for Horizon Chat" VerticalAlignment = "Center" FontFamily = "Muli" FontSize = "36" Foreground = "White"/>
<!-- For the username box -->
<TextBox x:Name = "nameSignUpBox" HorizontalAlignment = "Center" Margin = "0,-150,0,0" TextWrapping = "Wrap" VerticalAlignment = "Center" Width = "370" FontFamily = "Muli" FontSize = "26" BorderThickness = "2" MaxHeight = "61" MaxWidth = "686"/>
<TextBlock x:Name = "nameSignUpBoxDescription" HorizontalAlignment = "Center" Margin = "456,334,738,544" TextWrapping = "Wrap" Text = "Username" VerticalAlignment = "Center" FontFamily = "Muli" FontSize = "18" Foreground = "#FFDADADA"/>
<!-- For the email box -->
<TextBox x:Name = "emailSignUpBox" HorizontalAlignment = "Center" Margin = "0,0,0,0" TextWrapping = "Wrap" VerticalAlignment = "Center" Width = "370" FontFamily = "Muli" FontSize = "26" BorderThickness = "2" MaxHeight = "61" MaxWidth = "686"/>
<TextBlock x:Name = "emailSignUpBoxDescription" HorizontalAlignment = "Center" Margin = "456,408,778,468" TextWrapping = "Wrap" Text = "Email" VerticalAlignment = "Center" FontFamily = "Muli" FontSize = "18" Foreground = "#FFDADADA"/>
<!-- For the password box -->
<PasswordBox x:Name = "passwordSignUpBox" HorizontalAlignment = "Center" Margin = "0,150,0,0" VerticalAlignment = "Center" Width = "370" FontFamily = "Muli" FontSize = "26" BorderThickness = "2" MaxHeight = "61" MaxWidth = "686"/>
<TextBlock x:Name = "passwordSignUpBoxDescription" HorizontalAlignment = "Center" Margin = "455,484,742,393" TextWrapping = "Wrap" Text = "Password" VerticalAlignment = "Center" FontFamily = "Muli" FontSize = "18" Foreground = "#FFDADADA"/>

Затем, когда программа запускается, она претерпевает некоторые изменения, такие как изменение размера окна, чтобы оно соответствовало этому блоку, и его отображение, и все такое. Вот код для этого:

BrushConverter brushconverter = new BrushConverter();
this.Background = (Brush)brushconverter.ConvertFrom("#FF9C9C9C");
this.Width = 640;
this.Height = 450;
this.ResizeMode = ResizeMode.NoResize;
double screenWidth = System.Windows.SystemParameters.PrimaryScreenWidth;
double screenHeight = System.Windows.SystemParameters.PrimaryScreenHeight;
double windowWidth = this.Width;
double windowHeight = this.Height;
this.Left = (screenWidth / 2) - (windowWidth / 2);
this.Top = (screenHeight / 2) - (windowHeight / 2);

Теперь все, что связано с окном, потому что в моем случае у меня уже есть все, что видно. Итак, когда я запускаю программу, я получаю все Кроме - небольшой текст над полями (Имя пользователя, Электронная почта и Пароль). Вот это:

Текст исчезает при открытии окна

Теперь я предполагаю, что он перемещает текст куда-то во время изменения размера, поскольку, когда я не изменяю размер окна, он все еще там (как в дизайнере). Тем не менее, это все еще проблема, если он перемещает мой текст в другое место. Как я могу это исправить?

Обновлено: Я попытался изменить размер окна дизайнера, и вот до и после изменения его размера примерно на 100 пикселей:

Перед:

Текст исчезает при открытии окна

50%:

Текст исчезает при открытии окна

И после:

Текст исчезает при открытии окна

Вам действительно не следует использовать поля для размещения текста, если вам нужно это сделать, используйте Canvas вместо Grid. Однако то, что вам действительно следует делать, - это правильно размещать ваши метки / текстовые поля в сетке, используя строки / столбцы, размер которых будет изменяться без кода программной части.

Ron Beyer 16.06.2018 18:21

@RonBeyer В чем недостаток использования полей в тексте?

User1178 16.06.2018 18:29

Именно то, что вы переживаете! WPF сделан так, чтобы быть «независимым от разрешения», вы пытаетесь использовать смещения пикселей, а затем масштабировать их, в основном внедряя методы WinForms в WPF. Если вы правильно настроили сетку и разместили текст в нужных местах, вам не нужно беспокоиться о коде программной части для масштабирования формы, WPF сделает это за вас.

Ron Beyer 16.06.2018 18:31

Если вам слишком лень переделывать свой XAML, есть одна строчка для решения вашей проблемы, несмотря на то, что это плохая практика для такого рода вещей - поместите все в ViewBox.

shadow32 16.06.2018 20:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используя @ shadow32, я реорганизовал элементы управления в окно просмотра и создал чисто xaml-решение для ваших требований к динамическому изменению размера. Я также очистил XAML, меньше да лучше хе.
Надеюсь, вы сможете использовать этот подход, постарайтесь сохранить макет в дизайнере, если это возможно.
Это делает решение более удобным в обслуживании.

    <Window x:Class = "WpfApp1.Window1"
            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:WpfApp1"
            mc:Ignorable = "d"
            Title = "Window1" Height = "450" Width = "800">
        <Window.Resources>
            <!--SET THE TEXT STYLING, AVOID REPEATING THE SAME STYLE-->
            <Style TargetType = "TextBlock">
                <Setter Property = "FontFamily" Value = "Muli" />
                <Setter Property = "TextWrapping" Value = "Wrap" />
                <Setter Property = "Foreground" Value = "#FFDADADA"/>
                <!--MARGIN SPACES OUT THE DATA ENTRY FIELDS-->
                <Setter Property = "Margin" Value = "0,5,0,0"></Setter>
            </Style>
        </Window.Resources>
        <!--ROOT CONTAINER CONTROL WITH MARGIN TO CENTER-->
        <DockPanel Margin = "50,0" >

            <!--SIDE BORDER AND BACKGROUND-->
            <Border BorderBrush = "Black" BorderThickness = "1,0" Background = "#FF5F5F6E">

                <!--VIEWBOX FOR SCALING-->
                <Viewbox VerticalAlignment = "Top">

                    <!--DOCK PANEL FOR WRAPPING HEADER AND DATA ENTRY CONTROLS-->
                    <DockPanel >

                        <!--HEADER WITH MARGIN TO PAD THE TOP-->
                        <TextBlock x:Name = "signUpText"
                                   Text = "Sign up for Horizon Chat"
                                   Foreground = "White"
                                   Margin = "0,10,0,0" 
                                   DockPanel.Dock = "Top"
                                   FontSize = "20"/>

                        <!--STACKPANEL FOR ORDERING CONTROLS-->
                        <StackPanel DockPanel.Dock = "Bottom" Margin = "5,0">

                            <!--TOP PADDING TEXTBLOCK-->
                            <TextBlock />

                            <!-- For the username box -->
                            <TextBlock x:Name = "nameSignUpBoxDescription" 
                                       Text = "Username" />
                            <TextBox x:Name = "nameSignUpBox" />

                            <!-- For the email box -->
                            <TextBlock x:Name = "emailSignUpBoxDescription" 
                                       Text = "Email" />
                            <TextBox x:Name = "emailSignUpBox" />

                            <!-- For the password box -->
                            <TextBlock x:Name = "passwordSignUpBoxDescription" 
                                       Text = "Password" />
                            <PasswordBox x:Name = "passwordSignUpBox" />

                            <!--BOTTOM PADDING TEXTBLOCK-->
                            <TextBlock />
                        </StackPanel>
                    </DockPanel>
                </Viewbox>
            </Border>
        </DockPanel>
    </Window>

Другие вопросы по теме