2016-04-04 17 views
2

TextBoxのデフォルトフォントを設定するにはどうすればよいですか?TextBoxにデフォルトフォントを設定

TextBoxのために同じことをやろうと
TextBlock.FontFamilyProperty.OverrideMetadata(typeof(TextBlock), 
    new FrameworkPropertyMetadata(new FontFamily("Verdana"))); 

::それは(hereから取られた)だTextBlockについては

TextBox.FontFamilyProperty.OverrideMetadata(typeof(TextBox), 
    new FrameworkPropertyMetadata(new FontFamily("Verdana"))); 

がスローされます。スロー

例外:「システムを。 Windows.Markup.XamlParseException 'in PresentationFramework.dll

追加情報: 'System.Windows.Controls.TextBox'の型初期化子が例外をスローしました。 PropertyMetadataはすでに 'TextBox'タイプとして登録されています。ここで


REPROです:

<StackPanel> 
    <TextBlock Text="123123" /> 
    <TextBox Text="123123" BorderThickness="0" Padding="-2,0,-2,0" /> 
</StackPanel> 

作品(InitializeComponent()前に)ウィンドウコンストラクタで上記のようTextBlockフォントを設定します。 TextBoxデフォルトフォントを設定するにはどうすればいいですか?私は全体のアプリケーションのために1つの場所でそれを"Verdana"として設定する解決策が必要です。


インテリセンスは示しています。アプリケーション全体のために

TextBlock

TextBox

+0

フレームワーク(TextBlockなど)のタイプのOverrideMetadataの呼び出しは、とにかく疑念があります。スタイルでデフォルト値を設定する必要があります。 – Clemens

+0

'TextElement'を設定しようとしましたが、何のためにも動作しません。 'TextBlock'を設定すると' TextBlock'だけが動作します。 – Sinatr

+0

'DependencyPropertyKey'を使って' OverrideMetadata(Type、PropertyMetadata、DependencyPropertyKey) 'バージョンを試しましたか? – bars222

答えて

2

あなたはTextBoxBaseTextBoxを変更することができます。それは何とか私のために働いた。

TextBoxBase.FontFamilyProperty.OverrideMetadata(typeof(TextBoxBase), 
       new FrameworkPropertyMetadata(new FontFamily("Verdana"))); 
+0

VS15は 'Control 'を使うことを提案しています。 ... typeof(TextBoxBase) 'です。奇妙なことに、コンボがうまくいく(と私は 'app.xaml'ソリューションよりもそれが好きです)、ありがとう、自分自身を推測することはありません。 – Sinatr

+0

あなたは大歓迎です。アプリのフォントを変更する方法をありがとう(便利な質問のため)。 – bars222

1

、あなたはApp.xamlでそれを設定することができます。個々のファイルの

<Application.Resources> 
    <Style TargetType="TextBox"> 
     <Setter Property="FontFamily" Value="Verdana" /> 
     <Setter Property="FontSize" Value="50"></Setter> 
    </Style> 

    <Style TargetType="TextBlock"> 
     <Setter Property="FontFamily" Value="Verdana" /> 
     <Setter Property="FontSize" Value="100"></Setter> 
    </Style> 
</Application.Resources> 

、あなたをウィンドウの後にXAMLでこれを設定できますまたはUserResourceの開始タグ:

<Window.Resources> 
    <Style TargetType="TextBlock"> 
     <Setter Property="FontFamily" Value="Verdana" /> 
    </Style> 
</Window.Resources> 

それとも「ユーザーコントロール」だ場合、「ユーザーコントロール」と「ウィンドウ」を交換するには - あなたのアイデアを得ます。

<Window x:Class="WpfApplicationTestApp.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
    <Style TargetType="TextBlock"> 
     <Setter Property="FontFamily" Value="Verdana" /> 
    </Style> 
</Window.Resources> 

    <Grid> 
     <StackPanel> 
      <TextBlock Text="123123" /> 
      <TextBox Text="123123" BorderThickness="0" Padding="-2,0,-2,0" /> 
     </StackPanel> 
    </Grid> 
</Window> 

幸運:

あなたの基本的なフォーマットは次のようになります!

+0

私は20のウィンドウと50のユーザーコントロールを持っています.1つの場所にデフォルトを設定すると良いでしょう。あなたの例は 'TextBlock'(' TextBox'フォントスタイルはまだ "Segoe")の** **に対してのみ動作します。私は 'TargetType'を' TextBox'に変更することができます。それは 'TextBox'に対してのみ有効です。両方を設定すると、最初に定義されたスタイルにのみスタイルを適用するように見えます。面白い。 – Sinatr

+0

@Sinatr - App.xamlでグローバルに設定できます。 – Kiel

+0

また、TextBlockを対象としたFontSizeもButtonに影響します(実行時ではなくStudioで)...?!? – T4NK3R

0

私の問題では、は、スタンドアローンに設定されていませんが、TextBlockと一緒に設定してください。

問題は、これらのコントロールに共通の基底クラスが継承されていないことに関連しているようです。FontFamilyPropertyから継承されています。 TextBoxTextBoxBaseTextBlockから1つを取ります。どちらかのコードの後ろ(ウィンドウの)またはウィンドウxamlの両方に設定しようとすると、例外か何かが発生します(どちらにも作用しません)。

トリックはなぜ私に聞かないで、アプリケーションのリソースでそれを設定することですが、それは、その後動作します(とすべてのために働く):後も(@bars222's answerのおかげで)働く

<Application.Resources> 
    <Style TargetType="TextBox"> 
     <Setter Property="FontFamily" Value="Verdana" /> 
    </Style> 
    <Style TargetType="TextBlock"> 
     <Setter Property="FontFamily" Value="Verdana" /> 
    </Style> 
    <!-- not sure if this make sense --> 
    <Style TargetType="TextElement"> 
     <Setter Property="FontFamily" Value="Verdana" /> 
    </Style> 
</Application.Resources> 

// font overrides 
TextElement.FontFamilyProperty.OverrideMetadata(typeof(TextElement), 
    new FrameworkPropertyMetadata(new FontFamily("Verdana"))); 
TextBlock.FontFamilyProperty.OverrideMetadata(typeof(TextBlock), 
    new FrameworkPropertyMetadata(new FontFamily("Verdana"))); 
Control.FontFamilyProperty.OverrideMetadata(typeof(TextBoxBase), 
    new FrameworkPropertyMetadata(new FontFamily("Verdana"))); 
関連する問題