私は、ほとんどのコントロールが実行時に動的に作成されるWPFアプリケーションで作業しています。いくつかのコードを保存するために、私は様々な静的コントロールを作成しました。今、私はそれの横に削除ボタンでテキストボックスコントロールを作成したいと思います。私が今立ち往生しているところは、コントロールのイベントをどうやってキャプチャするのですか? (コードを参照)derrivedクラスの汎用ボタンのイベントをキャプチャする
編集: 私はカスタムコントロールを作成しようとしました。しかし、私はカスタムイベントを動作させることはできません。私。 wpf-pageで私はそれにハンドラをフックするために、削除イベントを見つけることができません。どこで私は間違えましたか?これまでのところ、: Grid
ステートメントを削除すると、イベントが表示されることがわかりました。
public class tbTextReadOnlyWithDeleteButton : Grid
{
public event EventHandler Delete;
public tbTextReadOnlyWithDeleteButton(int gridrow, int gridcol, string feldname, object quelle, string ctlname, object tag)
{
Grid gr = new Grid() { Name = "grMit_" + gridrow + "_" + gridcol + "_" + ctlname };
gr.SetValue(Grid.RowProperty, gridrow);
gr.SetValue(Grid.ColumnProperty, gridcol);
gr.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(30) });
gr.ColumnDefinitions.Add(new ColumnDefinition());
gr.Tag = tag;
Button bu = new Button() { Name = "buLoeschen" };
bu.SetValue(Grid.ColumnProperty, 0);
bu.Margin = new Thickness(5, 5, 5, 5);
bu.Content = "\xE10A";
bu.FontFamily = new FontFamily("Segoe MDL2 Assets");
bu.FontSize = 10;
bu.Tag = quelle;
bu.Click += Bu_Click;
TextBox tb = new TextBox();
tb.SetValue(Grid.RowProperty, 0);
tb.SetValue(Grid.ColumnProperty, 1);
tb.IsReadOnly = true;
tb.VerticalContentAlignment = VerticalAlignment.Center;
tb.HorizontalContentAlignment = HorizontalAlignment.Left;
tb.Background = new SolidColorBrush() { Opacity = 1 };
tb.BorderThickness = new Thickness(0);
tb.TextWrapping = TextWrapping.Wrap;
BindingOperations.SetBinding(tb, TextBox.TextProperty, new Binding(feldname) { Source = quelle, Mode = BindingMode.OneWay });
gr.Children.Add(bu);
gr.Children.Add(tb);
}
private void Bu_Click(object sender, RoutedEventArgs e)
{
Delete(sender, e);
}
}
// in the page it looks like this:
Grid tbMit = new tbTextReadOnlyWithDeleteButton(1, 0, "Name", mit, "name", dat);
tbMit.Delete // <-- Why can't this be found??
エンド編集
// Control
public static Grid tbTextReadOnlyWithDeleteButton(int gridrow, int gridcol, string feldname, object quelle)
{
Grid gr = new Grid();
gr.SetValue(Grid.RowProperty, gridrow);
gr.SetValue(Grid.ColumnProperty, gridcol);
gr.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(30)});
gr.ColumnDefinitions.Add(new ColumnDefinition());
Button bu = new Button() { Name = "buDelete" };
bu.SetValue(Grid.ColumnProperty, 0);
bu.Margin = new Thickness(5, 5, 5, 5);
bu.Content = "\xE10A";
bu.FontFamily = new FontFamily("Segoe MDL2 Assets");
bu.FontSize = 10;
bu.Tag = quelle;
TextBox tb = new TextBox();
tb.SetValue(Grid.RowProperty, 0);
tb.SetValue(Grid.ColumnProperty, 1);
tb.IsReadOnly = true;
tb.VerticalContentAlignment = VerticalAlignment.Center;
tb.HorizontalContentAlignment = HorizontalAlignment.Left;
tb.Background = new SolidColorBrush() { Opacity = 1 };
tb.BorderThickness = new Thickness(0);
tb.TextWrapping = TextWrapping.Wrap;
BindingOperations.SetBinding(tb, TextBox.TextProperty, new Binding(feldname) { Source = quelle, Mode = BindingMode.OneWay });
gr.Children.Add(bu);
gr.Children.Add(tb);
return gr;
}
// Usage in Code
Grid tbMit = glCtlTextbox.tbTextReadOnlyWithDeleteButton(1, 0, "Name", mit);
spStackpanel.Children.Add(tbMit);
//Now I need something like this, which is not working
tbMit.buDelete.Click += buDelete__Click;
は誰これにアプローチする方法のヒントを持っていますか?
ありがとうございます!
私があなただったら、私は細かい作品 – KANAX