C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: C#WPF、TextBlockの頭文字のみSizeを変えたい


(過去ログ 147 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■86239 / inTopicNo.1)  C#WPF、TextBlockの頭文字のみSizeを変えたい
  
□投稿者/ かい (3回)-(2018/01/02(Tue) 23:39:30)

分類:[.NET 全般] 

お世話になっています。
環境はVisualStudio2017 C# WPFです。

掲題の通り、TextBlockコントロールの、頭文字のみFontSizeを変えたいと思っています。
TextEffectsクラスを用いることで、装飾を変更することが可能ということはわかりましたが、
そこから先、具体的なFontSize変更の実装がわかりません。
何かご存じであればお教えください。

-イメージ
<TextBlock HorizontalAlignment="Left" 
           VerticalAlignment="Top"
           FontSize ="16">
    <TextBlock.TextEffects>
        <TextEffect PositionStart="0" PositionCount="1" FontSize ="10px"></TextEffect>
    </TextBlock.TextEffects>
    <Run>あいうえお</Run>
</TextBlock>


※
以下の実装でやりたいことが出来ることに気づきましたが、
これではBindingが厳しいのではないかと思っております。

<TextBlock HorizontalAlignment="Left" 
           VerticalAlignment="Top"
           FontSize ="16">
    <TextBlock FontSize="50">
        あ
    </TextBlock>
    いうえお
</TextBlock>

引用返信 編集キー/
■86246 / inTopicNo.2)  Re[1]: C#WPF、TextBlockの頭文字のみSizeを変えたい
□投稿者/ Hongliang (593回)-(2018/01/03(Wed) 19:18:32)
頭文字というのは、TextBlockに表示する文字列の先頭文字、という理解で合っていますでしょうか。

まず、TextEffectクラスにはFontSizeプロパティなんてものは存在していません。
https://msdn.microsoft.com/ja-jp/library/system.windows.media.texteffect.aspx
つまり、TextEffectによってはフォントサイズの変更はできません。
Transformプロパティはあるのでこれによってスケーリングさせることはできますが、残念ながらこの変形はレンダリングのみに影響するため、恐らく望ましくないことになるでしょう。

TextBlockに表示文字列を設定するにあたって、以下の2種類の方法を採れます。
・Textプロパティに設定する
・子要素としてSystem.Windows.Documents.Inline派生クラスを並べる
後者は、例えばこういう感じです。
<TextBlock><Run>あ</Run><Run Text="いうえお"/></TextBlock>
RunクラスのTextプロパティはバインディングにも対応しています(ただし.NET 4以降)。
// なお、Run間の改行は空白文字扱いになったりするので整形注意。

一番手っ取り早い方法としては、
・ViewModelに、FirstCharとRestCharsを持ったクラスを用意する
・TextBlockを以下のような構造にする
<TextBlock><Run Text="{Binding FirstChar}" FontSize="24"/><Run Text="{Binding RestChars}"/></TextBlock>

Viewだけで完結させたいのであれば、各Runには表示文字列全体をバインディングさせ、IValueConverterを適用する手もあります。

頭文字というのが最初の1文字だけでなく、単語毎のとか言うことになるとそれなりに面倒なことになりそうです。
引用返信 編集キー/
■86254 / inTopicNo.3)  Re[2]: C#WPF、TextBlockの頭文字のみSizeを変えたい
□投稿者/ かい (4回)-(2018/01/06(Sat) 01:02:14)

返信遅れてすみません。
TextEffectの件ですが、
挙げて頂いた案を実装し、勉強させて頂こうと思っております。
(実装にあたり、障害等は発生しない認識。うまく行くと思います)

ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -