バインディングのデフォルトの動作を変更する方法はありますか?
これは、ControlTemplate または Style を介して行うことができますか?
バインディングのデフォルトの動作を変更する方法はありますか?
これは、ControlTemplate または Style を介して行うことができますか?
おそらく、バインディングのデフォルトをオーバーライドする方が適切な場合があります。そのためには、これを使用できます。
http://www.hardcodet.net/2008/04/wpf-custom-binding-class
次に、いくつかの CustomBinding クラス (コンストラクターで適切な既定値を設定) と MarkupExtension 'CustomBindingExtension' を定義します。次に、XAML のバインドを次のように置き換えます。
Text="{CustomBinding Path=Xy...}"
ValidatesOnDataError と NotifyOnValidationError の特定のデフォルトを設定するバインディングで同様のことを試してみましたが、あなたのケースでもうまくいくはずです。問題は、すべてのバインディングを置き換えることに慣れているかどうかですが、このタスクを自動化できます。
いいえ。この動作は、 を登録するときに渡されるクラスDefaultUpdateSourceTrigger
のによって処理されます。これは、継承されたクラス内およびバインディングごとにオーバーライドできますが、アプリケーション内のすべてに対してオーバーライドすることはできません。FrameworkPropertyMetadata
DependencyProperty
TextBox
TextBox
ピーターが提案したように、私は次のような継承されたクラスでそれを解決しました:
public class ActiveTextBox:TextBox
{
public ActiveTextBox()
{
Loaded += ActiveTextBox_Loaded;
}
void ActiveTextBox_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
Binding myBinding = BindingOperations.GetBinding(this, TextProperty);
if (myBinding != null && myBinding.UpdateSourceTrigger != UpdateSourceTrigger.PropertyChanged)
{
Binding bind = (Binding) Allkort3.Common.Extensions.Extensions.CloneProperties(myBinding);
bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
BindingOperations.SetBinding(this, TextBox.TextProperty, bind);
}
}
}
そしてこのヘルプメソッド:
public static object CloneProperties(object o)
{
var type = o.GetType();
var clone = Activator.CreateInstance(type);
foreach (var property in type.GetProperties())
{
if (property.GetSetMethod() != null && property.GetValue(o, null) != null)
property.SetValue(clone, property.GetValue(o, null), null);
}
return clone;
}
それをより良く解決する方法はありますか?