2012-02-10 43 views

答えて

10

スタイル内のUpdateSourceTriggerのデフォルトモードを変更することはできません。これは、DependencyProperty(この場合はTextプロパティ)が登録されている場合、FrameworkPropertyMetadataクラスのDefaultUpdateSourceTriggerとして設定されます。

TextBoxから派生し、依存関係プロパティを登録するときにこの値を変更するカスタムテキストボックスタイプを作成するか、代わりに、Caliburn.Micro MVVMフレームワークを調べることもできます。このフレームワークでは、アプリケーションのすべてのテキストボックスに対して自動的にこれを(コードを使って、規約に基づいたバインディングの一部として)設定します。ただ、受け入れ答え(はい、私は:)私はこの質問をnecromancingています知っている)を拡張

+0

私は答えを更新しました。 – devdigital

+0

MVVMフレームワークを使用してみましたか?それはあなたに仕事のすべてのホストを保存し、バインディングはCaliburn.Microとの喜びです。独自のソリューションをロールしたい場合は、独自のTextBox派生型を作成するのではなく、カスタムマークアップ拡張、またはカスタムバインディングを記述することができます。いくつかのアイデアについてはhttp://www.paulstovell.com/wpf-delaybindingまたはhttp://www.hardcodet.net/2008/04/wpf-custom-binding-classをご覧ください。 – devdigital

+0

ありがとうございました! – syned

1

は実際には、自身のTextBoxは非常に簡単です、TextBoxExt(多くの拡張が、あなたが知っていないそれを呼び出すことができます... )

public class TextBoxExt : TextBox 
{ 
    private static readonly MethodInfo onTextPropertyChangedMethod 
     = typeof(TextBox).GetMethod("OnTextPropertyChanged", BindingFlags.Static | BindingFlags.NonPublic); 
    private static readonly MethodInfo coerceTextMethod 
     = typeof(TextBox).GetMethod("CoerceText", BindingFlags.Static | BindingFlags.NonPublic); 
    static TextBoxExt() 
    { 

     TextProperty.OverrideMetadata(
     typeof(TextBoxExt), 

     // found this metadata with reflector: 
     new FrameworkPropertyMetadata(string.Empty, 
             FrameworkPropertyMetadataOptions.BindsTwoWayByDefault | FrameworkPropertyMetadataOptions.Journal, 
             new PropertyChangedCallback(MyOnTextPropertyChanged),callback 
             new CoerceValueCallback(MyCoerceText), 
             true, // IsAnimationProhibited 
             UpdateSourceTrigger.PropertyChanged) 
     ); 
    } 

    private static object MyCoerceText(DependencyObject d, object basevalue) 
    { 
     return coerceTextMethod.Invoke(null, new object[] { d, basevalue }); 
    } 

    private static void MyOnTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     onTextPropertyChangedMethod.Invoke(null, new object[] { d, e }); 
    } 

    } 

とどこか{}のResourceDictionaryの.xamlまたはApp.xamlで:

<Style TargetType="{x:Type control:TextBoxExt}" 
     BasedOn="{StaticResource {x:Type TextBox}}" /> 
関連する問題