C# WPF дизайн для локализации

214
21 мая 2018, 14:30

Как контролировать изменение дизайна при изменении длины слов? На некоторых языках слова очень длинные в переводе, как сохранить дизайн в таком случае и не резать слово?

Answer 1

Как вам уже сказали в комментариях - дизайн нужно реализовывать так, что бы он не был привязан к определенным размерам, то есть использовать "резиновую верстку".

Покажу пару примеров:

К примеру у нас есть окно, ширина которого равна 800. Нам к примеру надо разместить Grid на половину этого окна, как быть? 800/2 = 400, значит можем задать что то вроде этого:

<Grid Width="400" HorizontalAlignment="Left" Background="Red"></Grid>

Посмотрим результат:

Вроде как выглядит красиво, но что будет, если мы изменим размер нашего окна? А нечего хорошего, наш Grid не будет занимать 50% всего окна.

Так как в таких ситуациях быть?
На самом деле все очень просто, нам просто нужно избавиться от размера и для этого нам на помощь приходить тот же Grid, указание HorizontalAlignment и VerticalAlignment, да и по сути все.

Создадим новый Grid c двумя колонками и поместим туда то, что нам надо:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid Grid.Column="0" Background="Red"></Grid>
</Grid>

Изначально Column и Row размещаются поровну, по этому нам досточно положить наш Grid с цветов внутрь и он займет все пространство первой колонки. Теперь при изменение размера у нас всегда будет ровно 50% окна закрашено красным цветом.

Хорошо, давайте другой пример, к примеру нам в правый нижний угол надо поместить небольшую надпись, как быть?

Я лично очень часто вижу подобный код:

<TextBlock Text="Моя надпись" Margin="663,389,0,10" Width="115"/>

Этот код мне дала сама студия, когда я мышью передвинул элемент в редакторе. Как думаете, что тут не так? Ну во первых это то, что текст тут фиксирован по ширине в 115, во вторых этот текст может и будет отображаться в нижнем правом углу, но стоит нам чуть изменить размер окна, так тексту становиться плохо...

Так как быть в таком случае? И тут все довольно просто, пишите код всегда сами, старайтесь отказываться от размеров вовсе (если не требуется строго фиксировать объект), используйте настройки позиционирования (HorizontalAlignment и VerticalAlignment), не делайте отступы (margin) очень большими (выше 20 уже как по мне через чур). Давайте перепишем эту строку:

<TextBlock Text="Моя надпись" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,5,5"/>

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

Вот собственно и все, повторюсь - старайтесь писать код сами, не используйте дизайнер как средство размещения объектов (он годиться только лишь для просмотра), используйте настройки позиционирования и разметки и все у вас будет как надо!

READ ALSO
HEX ключ в .pem файл

HEX ключ в .pem файл

У меня есть закрытый и открытые тестовые ключи в виде массивов байт(ну или HEX строки, без разницы)Хочу на тестовых ключах проверить правильность...

190
Актуальность книг по старым версиям C#

Актуальность книг по старым версиям C#

Сейчас хочу начать изучение C#, прошелся по списку из этого ответа Книги и учебные ресурсы по C#

193
Экспорт данных из DataGrid в Excel [требует правки]

Экспорт данных из DataGrid в Excel [требует правки]

Необходимо вывести данные DataGrid в ExcelСлетает кодировка

210