2017-02-03 8 views
1

質問があります。動的にボタンを作成してイベントをクリックすることは可能ですか? たとえば、4つの異なるクリックイベントで4つのボタンを作成したいとします。 MVVMパターンで作成する必要はありません。当初、私はそれが可能であることを知りたいのですが、これをどのように達成することができますか?C# - WPF - ボタンを作成してプログラムでクリックするイベント

+1

「動的にボタンを作成する」とは、いくつかのコレクションからボタンを作成することですか?条件が満たされるたびにボタンを作成するか?いずれにせよ、あなたが探しているものを理解したいだけです。 –

+1

はい、それは可能性があり、タクウィンとしてやりやすく、アルマンは答えました。しかし、それは良いアイデアだとは限りません! XAMLのUIコントロールを維持するのが一番良い方法です。 – GreatJobBob

+0

いくつかのボタンを作成したいのですが、あるシナリオの条件によっては、3つのボタンが別のシナリオで5つのボタンになるなどです。したがって、XAMLでUIを維持することが本当に最善の場合は、XAMLのすべてのボタンを作成し、条件値に応じて可視性のみを変更することができます。 – KinectUser

答えて

1

はいそれは可能です:

public MainWindow() 
    { 
     InitializeComponent(); 

     var button = new Button() {Content = "myButton"}; // Creating button 
     button.Click += Button_Click; //Hooking up to event 
     myGrid.Children.Add(button); //Adding to grid or other parent 

    } 

    private void Button_Click(object sender, RoutedEventArgs e) //Event which will be triggerd on click of ya button 
    { 
     throw new NotImplementedException(); 
    } 
1

Yeap。

public MainWindow() 
    { 
     InitializeComponent(); 

     var btn1 = new Button{Content = "btn1"}; 

     //add event handler 1 
     btn1.Click += ClickHandler1; 

     //removes event handler 1 
     btn1.Click -= ClickHandler1; 

     //add event handler 2 
     btn1.Click += ClickHandler2; 

     Panel.Children.Add(btn1); 

    } 

    private void ClickHandler1(object sender, RoutedEventArgs e) 
    { 
     //do something 
    } 

    private void ClickHandler2(object sender, RoutedEventArgs e) 
    { 
     //do something 
    } 

    private void ClickHandler3(object sender, RoutedEventArgs e) 
    { 
     //do something 

    } 

複数のイベントハンドラを必要に応じて追加したり削除したりすることができます。

+0

あなたは私を理解していません、私はこのボタンの2つのボタンと別々のクリックイベントを作成したいです – KinectUser

0

1つの可能な方法は、これは、MVVMを使用して当然である、すなわち

<ItemsControl ItemsSource="{Binding Commands}"> 
     <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Button Command="{Binding Command}" Content="{Binding DisplayName}" /> 
     <DataTemplate> 
     <ItemsControl.ItemTemplate> 
    </ItemsControl> 

、あなたのビューモデルでコレクションにItemsSourceプロパティをバインドされています。

https://msdn.microsoft.com/en-us/magazine/dd419663.aspx?tduid=(a4fd6aaf12efe5326f52547f7c7c51ff)(256380)(2459594)(TnL5HPStwNw-EI6zVtliyeYaJRVV4Lm6cA)()

私だけ入力したコード:ビューモデルは、クラス(CommandViewModelRelayCommand)の一部が、ジョシュ・スミスの記事から取られ

public class ControlViewModel 
    { 
     public Collection<CommandViewModel> Commands { get; } 

     public ControlViewModel() 
     { 
      // Here have logic to determine which commands are added to the collection 
     var command1 = new RelayCommand(p => ActionForButton1()); 
     var command2 = new RelayCommand(p => ActionForButton2()); 

     Commands = new Collection<CommandViewModel>(); 
     Commands.Add(new CommandViewModel(command1, "Button 1")); 
     Commands.Add(new CommandViewModel(command2, "Button 2")); 

     } 

     private void ActionForButton1() 
     { 
     // .... 
     } 

     private void ActionForButton2() 
     { 
     // .... 
     } 
    } 

のようなものをCommandViewModelのコレクションのいくつかの種類を持っているでしょうここでは、構文エラーがないことを再確認することができます。

私はそれが役に立ちそうです

+0

ありがとう、私はそれを理解できませんよく私はそれについて何かもっと読む必要があると思う – KinectUser

関連する問題