Размещение текстовых блоков UWP на изображении

В настоящее время я разрабатываю универсальное приложение, которое может работать как на мобильных устройствах, так и на настольных компьютерах. Но у меня есть небольшая проблема. В моем приложении у меня есть страница для добавления новой кредитной карты в профиль пользователя. Итак, я задаю текст на изображении с помощью полей, но когда мое приложение запускается на устройстве с другим разрешением, текст будет менять свое положение (это очевидно). Мой вопрос: как я могу это сделать, чтобы текст занимал свое положение в соответствии с разрешением экрана?

Вот правильный вариант размещения текста (мобильная версия) введите здесь описание изображения


person Konstantin Chsherbakov    schedule 24.05.2016    source источник


Ответы (1)


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

Вы можете сохранить свой «фиксированный» макет, используя фиксированный размер и поля, и просто обернуть его в ViewBox.

<ViewBox>
    <YourControl />
</ViewBox>

Вот пример быстрого макета, сделанного с использованием той же RelativePanel, обернутой в окна просмотра нескольких размеров:

образец окна просмотра

И код (я продублировал RelativePanel просто для быстрого примера, но обратите внимание, что размер окна просмотра не совпадает с размером для внутреннего элемента управления):

    <Viewbox Width="80" Margin="12">
        <RelativePanel Width="200" Height="140" Background="DarkBlue" Padding="12">

            <TextBlock x:Name="number" 
                       Text="XXXX XXXX XXXX XXXX" 
                       Foreground="White"
                       RelativePanel.AlignVerticalCenterWithPanel="True"
                       RelativePanel.AlignHorizontalCenterWithPanel="true"/>

            <TextBlock x:Name="name"
                       Text="FIRST NAME"
                       Foreground="White"
                       RelativePanel.AlignLeftWith="number"
                       RelativePanel.Below="number" 
                       Margin="0,12,0,0"/>

            <TextBlock x:Name="date"
                       Text="MM/YY"
                       Foreground="White"
                       RelativePanel.AlignRightWith="number"
                       RelativePanel.Below="number" 
                       Margin="0,12,0,0"/>
        </RelativePanel>
    </Viewbox>

    <Viewbox Width="160" Margin="12">
        <RelativePanel Width="200" Height="140" Background="DarkBlue" Padding="12">

            <TextBlock x:Name="number1" 
                       Text="XXXX XXXX XXXX XXXX" 
                       Foreground="White"
                       RelativePanel.AlignVerticalCenterWithPanel="True"
                       RelativePanel.AlignHorizontalCenterWithPanel="true"/>

            <TextBlock x:Name="name1"
                       Text="FIRST NAME"
                       Foreground="White"
                       RelativePanel.AlignLeftWith="number1"
                       RelativePanel.Below="number1" 
                       Margin="0,12,0,0"/>

            <TextBlock x:Name="date1"
                       Text="MM/YY"
                       Foreground="White"
                       RelativePanel.AlignRightWith="number1"
                       RelativePanel.Below="number1" 
                       Margin="0,12,0,0"/>
        </RelativePanel>
    </Viewbox>

    <Viewbox Width="320" Margin="12">
        <RelativePanel Width="200" Height="140" Background="DarkBlue" Padding="12">

            <TextBlock x:Name="number2" 
                       Text="XXXX XXXX XXXX XXXX" 
                       Foreground="White"
                       RelativePanel.AlignVerticalCenterWithPanel="True"
                       RelativePanel.AlignHorizontalCenterWithPanel="true"/>

            <TextBlock x:Name="name2"
                       Text="FIRST NAME"
                       Foreground="White"
                       RelativePanel.AlignLeftWith="number2"
                       RelativePanel.Below="number2" 
                       Margin="0,12,0,0"/>

            <TextBlock x:Name="date2"
                       Text="MM/YY"
                       Foreground="White"
                       RelativePanel.AlignRightWith="number2"
                       RelativePanel.Below="number2" 
                       Margin="0,12,0,0"/>
        </RelativePanel>
    </Viewbox>
</StackPanel>
person Vincent    schedule 24.05.2016
comment
Большое спасибо за ответ! Вы решили мою проблему! :D - person Konstantin Chsherbakov; 24.05.2016