Обработка разных размеров шрифта из-за свойств отображения в приложении WPF?

StackOverflow https://stackoverflow.com/questions/811217

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

Спасибо!

Это было полезно?

Решение

Кнопка 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> 

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

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

Вы жестко запрограммировали размеры элементов, используя свойства Width и Height?В 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top