WPF プロジェクトで .net 4.5 を使用しています。TextBox TextChangedEvent を発生させたいと思います。これは私がやったことです:
tb.RaiseEvent(new RoutedEventArgs(TextBox.TextChangedEvent));
以前、Button.ClickEvent で同じ種類の RaiseEvent を実行したことがありますが、これを行うにはどうすればよいですか?
これにより、次のようなエラーが発生します。
Exception:Thrown: 「'System.Windows.RoutedEventArgs' 型のオブジェクトは、'System.Windows.Controls.TextChangedEventArgs' 型に変換できません。」(System.ArgumentException) System.ArgumentException がスローされました: 「'System.Windows.RoutedEventArgs' 型のオブジェクトは、'System.Windows.Controls.TextChangedEventArgs' 型に変換できません。
[編集]
変更された実際のテキスト ボックスのテキストは、次のように添付された動作によって処理されます。プログラムでイベントを発生させたい場所は、別のコントロールの添付された動作にあります。後の動作では、テキスト ボックス オブジェクトがあります。
public class textboxTextChangedBehavior : Behavior<TextBox>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.TextChanged += OnTextChanged;
}
protected override void OnDetaching()
{
AssociatedObject.TextChanged -= OnTextChanged;
base.OnDetaching();
}
private void OnTextChanged(object sender, TextChangedEventArgs args)
{
var textBox = (sender as TextBox);
if (textBox != null)
{
//Populate ObservableCollection
}
}
}
イベントを発生させようとする場所:
public class FindPopupBehavior : Behavior<Popup>
{
protected override void OnAttached()
{
AssociatedObject.Opened += _OpenFindPopup;
}
protected override void OnDetaching()
{
AssociatedObject.Opened -= _OpenFindPopup;
}
void _OpenFindPopup(object sender, EventArgs e)
{
//Fake a TextBox text changed event
if (TextBoxObject == null)
return;
TextBox tb = TextBoxObject as TextBox;
if (tb.Text == "")
return;
tb.RaiseEvent(new RoutedEventArgs(TextBox.TextChangedEvent));
}
public static readonly DependencyProperty TextBoxProperty =
DependencyProperty.Register("TextBoxObject", typeof(TextBox), typeof(FindPopupBehavior), new UIPropertyMetadata(null));
public object TextBoxObject
{
get { return (object)GetValue(TextBoxProperty); }
set { SetValue(TextBoxProperty, value); }
}
}
[編集2]
ObservableCollection を閉じるこのポップアップがクリアされると、テキスト ボックスはポップアップに存在し、テキスト ボックスのテキストは非表示になりますが残ります。ポップアップが再度開かれ、テキスト ボックスにテキストがある場合は、ObservableCollection を再設定する必要があります。これは、textchanged 動作でこのポピュレーションを行います。これが、私がイベントを偽造することを考えていた理由です。