読者です 読者をやめる 読者になる 読者になる

Code for final

ふぁいなる向けのコード置き場です。すでにコードじゃないこともいっぱい。

WPFでTextBlockの高さを文字数に合わせて自動で調整する。

WinFormと比べてWPFのいいところは可変のレイアウトが作りやすいことだと思います。
ただ、慣れてないと思うようにいかないことが多々あります。

グリッドの下にテキストを表示して選択中のものを表示するといったことを実装する際にちょっとハマったので記録しておきます。

WPFのレイアウトはGridを元に実装します。
具体的には以下のように実装するのですが、ポイントは以下の2つです。

1.テキスト表示エリアのRowDefinitionでHeight="Auto"を指定する。
テキストの長さに合わせて高さを調整するようにします。TextBlockに指定してはだめです。ちなみに指定しないとグリッドエリアとテキスト表示エリアが半分ずつになります。

2.テキストを表示するTextBlockにTextWrappig="Wrap"を指定する。
これを指定しない折り返されずに超えた分が見切れます。

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition> 
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>

        <!-- グリッドエリア -->
        <DataGrid Grid.Row="0" ItemsSource="{Binding NowExplorers}"></DataGrid>
        
        <!-- テキスト表示エリア -->
        <TextBlock Grid.Row="1" Text="{Binding CurrentExplorer.LocationPath}" TextWrapping="Wrap"></TextBlock>
</Grid>

ExplorerWindowCleanerを実装するときにはまったので詳しい実装例はGitHubを参照ください。

github.com