대부분의 컨트롤이 런타임에 동적으로 생성되는 WPF 앱에서 작업하고 있습니다. 일부 코드를 저장하기 위해 다양한 정적 컨트롤을 만들었습니다. 이제 텍스트 단추 옆에 삭제 단추가있는 텍스트 상자 컨트롤을 만들려고합니다. 내가 지금 붙어있는 지점은 어떻게 컨트롤의 이벤트를 캡처합니까? (코드 참조)derrived 클래스의 일반 버튼 이벤트 캡처 클릭
편집 : 제안 된대로 사용자 지정 컨트롤을 만들려고했습니다. 그러나 사용자 지정 이벤트가 작동하지 않습니다. 나는. wpf-page에서 delete 이벤트를 찾아 낼 수 없습니다. 나는 어디로 잘못 갔는가? 지금까지 나는 : 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