WPFアプリの表示プロパティによるさまざまなフォントサイズの処理

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

  •  03-07-2019
  •  | 
  •  

質問

私のグループは、WPFでエディタータイプのアプリを構築しています。私たちが気づいたことの1つは、WinXPマシンで、「windows classic style」で実行されていることです。テーマ、ボタン上のテキストはうまく適合します。ただし、「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では、これを行うための推奨される方法は、いくつかのレイアウトコンテナーを使用することです。

以下は、下部に2つのボタンを配置し、上部にテキストボックスを配置するグリッドの例です。

<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