Обработка различных размеров шрифта из-за свойств отображения в приложении WPF? - PullRequest
1 голос
/ 01 мая 2009

Моя группа создает приложение типа редактора в WPF. Одна вещь, которую мы заметили, заключается в том, что на моей машине с WinXP, работающей с темой «классический стиль Windows», текст на кнопках подходит хорошо. Однако на компьютере моего друга, который работает с темой «стиль Windows XP», размер шрифта больше, поэтому текст на кнопках обрезается внизу.

Есть ли способ справиться с этим красиво, например, автоматически изменять размеры элементов управления, чтобы соответствовать тексту?

Я не решаюсь вручную изменить размер кнопки, чтобы она соответствовала его макету, поскольку у всех остальных могут быть совершенно другие настройки в свойствах дисплея и специальных возможностях.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 01 мая 2009

Кнопка WPF автоматически изменит размер , чтобы соответствовать предоставленному контенту, однако это будет происходить только в том случае, если он находится внутри контейнера, который не устанавливает размер, и его размер не был установлен вручную , Чтобы доказать эту неразбериху с размером шрифта в следующем фрагменте кода:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Button
        Grid.Column="1"
        Grid.Row="1"
        FontSize="24"
        Content="QWERTY"/>
</Grid> 

Полагаю, ваши кнопки не изменились, потому что вы их ограничили. Чтобы это исправить, вам нужно решить, как вы хотите, чтобы они изменяли размер (что может быть очень сложно, если элементы будут перекрываться, если бы они росли вслепую), и если ни один из предоставленных типов панелей не выполняет поведение роста, которое вы ищете, то вам может понадобиться написать свой собственный, который делает.

1 голос
/ 01 мая 2009

Вы жестко закодировали размеры элементов, используя свойства Ширина и Высота? В WPF рекомендуемый способ сделать это - использовать несколько контейнеров макета.

Ниже приведен пример сетки, в которой две кнопки находятся внизу, а текстовое поле вверху.

<Grid>
    <Grid.RowDefinitions>
        <!-- TextBox row with unspecified height. -->
        <RowDefinition Height="*"/>

        <!-- Button row with automated height so it resizes to
             fit the content -->
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <!-- Textbox on first row. -->
    <TextBox Margin="3" Name="textBox1" Grid.Row="0" AcceptsReturn="True" />

    <!-- StackPanel which lays the two buttons at the bottom horizontally.
         RightToLeft is specified so that the first button appears on right.
         -->
    <StackPanel Grid.Row="1" HorizontalAlignment="Right"
                Orientation="Horizontal" FlowDirection="RightToLeft">

        <!-- The buttons. Only padding and margin are hardcoded so these
             can resize to the contents -->
        <Button Padding="3" Margin="3">OK</Button>
        <Button Padding="3" Margin="3">Cancel</Button>
    </StackPanel>
</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...