質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

2526閲覧

TextBlockのフォントをFontDialogで変更したい

Grayi

総合スコア26

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

1グッド

0クリップ

投稿2020/09/13 14:33

Windowsアプリケーション、WPF、XAML、C#でツールを作っているのですが、TextBlockに表示した文字を、FontDialogで変更したいです。
TextBoxに入力したテキストをTextBlockに表示、そしてFontDialogでTextBoxとtextBlockのフォントサイズやスタイルを変更する機能を実装したいと考えています。
TextBoxの文字はFontDialogで変更することが出来るのですが、同様のことをTextBlockでできないでしょうか?
一部省略していますが、以下が現在書いているコードです。

XAML

1 <Grid> 2 <TextBox x:Name="Text1" HorizontalAlignment="Left" Height="99" TextWrapping="Wrap" Text="名前" VerticalAlignment="Top" FontSize="18"/> 3 4 <ItemsControl ItemsSource="{Binding Text, 5 ElementName=Text1, Mode=OneWay}" > 6 <ItemsControl.ItemsPanel> 7 <ItemsPanelTemplate> 8 <StackPanel Orientation="Horizontal" 9 HorizontalAlignment="Center"/> 10 </ItemsPanelTemplate> 11 </ItemsControl.ItemsPanel> 12 <ItemsControl.ItemTemplate> 13 <DataTemplate> 14 <TextBlock x:Name="TextBlock1" Style="{Binding}" 15 Margin="5" Text="{Binding}"/> 16 </DataTemplate> 17 </ItemsControl.ItemTemplate> 18 </ItemsControl> 19 </Grid> 20 21<Button x:Name="FontSize" Content="Font" HorizontalAlignment="Left" Margin="609,341,0,0" VerticalAlignment="Top" Width="75" Click="FontSize_Click"/> 22

C#

1private void FontSize_Click(object sender, RoutedEventArgs e) 2 { 3 FontDialog fontDialog = new FontDialog(); 4 5 6 if (fontDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) 7 { 8 9 Text1.FontFamily = new FontFamily(fontDialog.Font.Name); 10 Text1.FontSize = fontDialog.Font.Size * 98.0 / 72.0; 11 Text1.FontWeight = fontDialog.Font.Bold ? FontWeights.Bold : FontWeights.Regular; 12 Text1.FontStyle = fontDialog.Font.Italic ? FontStyles.Italic : FontStyles.Normal; 13 14 15 TextBlock1.FontFamily = new FontFamily(fontDialog.Font.Name); 16 TextBlock1.FontSize = fontDialog.Font.Size * 98.0 / 72.0; 17 TextBlock1.FontWeight = fontDialog.Font.Bold ? FontWeights.Bold : FontWeights.Regular; 18 TextBlock1.FontStyle = fontDialog.Font.Italic ? FontStyles.Italic : FontStyles.Normal; 19 20 21 } 22 }

もし解決策をご存知の方がいましたら、ご協力お願いいたします。

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ItemsControlの意図は、文字間隔を調整するためかなんかでしょうか?

ItemsControlまるごと同じフォント設定でいいなら、↓とすれば子孫要素に引き継がれます。

cs

1// <ItemsControl x:Name="ItemsControl1"> としたとして 2ItemsControl1.FontFamily =

Text1ItemsControl1をまとめて設定するために、親のGridに指定する場合は、↓のように添付プロパティをセットします。

cs

1// <Grid x:Name="Grid1"> としたとして 2TextElement.SetFontFamily(Grid1, new FontFamily(fontDialog.Font.Name));

その際<TextBox x:Name="Text1" FontSize="18" />のように、具体的に指定がある場合はそちらが優先します。

投稿2020/09/13 21:05

編集2023/08/12 09:30
TN8001

総合スコア9321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Grayi

2020/09/14 11:51

ItemsControlは、縦書きや横書きをできるようにしたいので、後々文字を表示する位置を調整したりするために入れました。子要素に設定が引き継がれるのですね。 教えていただいた通り、ItemsControlまるごと同じフォント設定にしたら、TextBlockに表示する文字をFontDialogで変更することができました! Text1とItemsControl1をまとめて設定する方法もありがとうございます。 丁寧に教えていただいたおかげで、とても助かりました。本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問