2017-06-25 8 views
0

thisで説明したように、すべてのテキストボックスにデフォルトのテキストが必要です。私はSteve Greyrexが提案したソリューションを使用し、受け入れられたとマークしました。WPFのテキストボックスにデフォルトのテキストを設定する

これは私のために働いていますが、今はテンプレートとして複数のテキストボックスで使用するように改良しようとしていますが、それぞれのテキストボックスに対してカスタムの異なるデフォルトテキストを設定したいと思います。

テンプレートの既定のテキストは、上記のリンクの「ここでの表示」などに設定されているため、このテンプレートをバインドするすべてのテキストボックスに同じテキストが割り当てられます。

テキストボックスごとに異なるデフォルトのテキストを配置したいのですが、どのようにすべてのテキストボックスに同じコントロールテンプレートを使用して行うことができますか?

の下で「Windows.Resourcesは、」私は上記の記事に示されているテンプレートをcotainsスタイルを作成しました:

<Style x:Key="DefaultText" TargetType="TextBox"> 
      <Setter Property="Template"> 
       <Setter.Value> 

         <!-- here the controltemplate from the above post --> 

       </Setter.Value> 
      </Setter> 
</Style> 

と私は次のように私のテキストボックスにそれを使用する:

<TextBox Style="{StaticResource DefaultText}"/> 
+1

ここをクリックしてください:https://stackoverflow.com/a/5620699/1136211 – Clemens

+0

Thx。あなたが提供したリンクが動作していて、それは素晴らしい例です。xamlファイルで区切り、辞書にマージするのが好きです。唯一のことは、それがエアロのテーマに依存していることです。私はエアロのテーマを使用せずに別の解決策を見つけました。私の答えを見てください。それも動作します。 – user1624552

答えて

0

私はこの1つでコントロールテンプレート内のTextBlockにTextプロパティを置き換えることによってそれを解決した:

Text="{TemplateBinding Tag}" 

は、私は以下のように任意のテキストボックスからそれを呼び出す:

<TextBox Style="{StaticResource WatermarkedTextBox}" 
     Tag="Type whatever here" /> 

あなたはTagプロパティを指定することにより、各テキストボックスのデフォルトのテキストを選択することができます。

また、このソリューションでは航空写真のテーマは必要ありません。

Clemensがこのlinkの中で提案している解決法は、Aeroテーマに基づいています。

+1

デフォルトテキストの添付プロパティを作成し、 'Tag'の代わりに使用することをお勧めします。' Tag'は特定の意味を持たないプロパティです。 – Maxim

+0

@Maximの例を投稿できますか?また、私はxamlからC#コードを使用しないことをしたいと思います。 – user1624552

+0

私は答えを掲載しました。もちろん、XAMLのデフォルトテキストを設定します。 – Maxim

0

代わりに、任意の特定のセマンティックなしていTagのカスタム添付プロパティを使用します。

public static class TextBoxHelper 
{ 
    public static readonly DependencyProperty DefaultTextProperty = DependencyProperty.RegisterAttached(
     "DefaultText", 
     typeof(string), 
     typeof(TextBoxHelper)); 

    [AttachedPropertyBrowsableForType(typeof(TextBox))] 
    public static string GetDefaultText(FrameworkElement element) 
    { 
     return (string)element.GetValue(DefaultTextProperty); 
    } 

    public static void SetDefaultText(FrameworkElement element, string value) 
    { 
     element.SetValue(DefaultTextProperty, value); 
    } 
} 

その後、あなたはXAMLからそれを使用することができます。

xmlns:helpers="<your_namespace_with_helpers>" 

<TextBox helpers:TextBoxHelper.DefaultText="..."/> 

次に、あなたのControlTemplateにあなたのようTextを設定することができますこの:

Text="{Binding Path=(helpers:TextBoxHelper.DefaultText), RelativeSource={RelativeSource TemplatedParent}}" 

thi

  1. あなたのコードは、それがコントロールを含めることができますTag性質に依存しているこの人のために予期せぬ静かになり、他の誰かによって維持されます。■アプローチは、私はので、あなたがそれを使用することをお勧めしますTagプロパティを使用するよりも冗長ですタイプがobjectなので
  2. DefaultText添付プロパティは厳密な意味を持ちます。誰でも、名前とタイプを調べるだけで何が必要かを言うことができます。

経験則は、定義されていないセマンティックでプロパティを使用することを常に避けようとしています。

関連する問題