2008-08-26 29 views
7

ListBoxItemsに定義されたスタイルを持つListBoxがあります。このスタイルの中には、ラベルとボタンがあります。そのボタンの1つ、自分のページ(またはそのスタイルを使用するページ)で処理できるクリックイベントを定義したいと思います。私のListBoxItemsスタイルからイベントを処理するために、WPFページでイベントハンドラを作成するにはどうすればよいですか?WPFリストボックススタイルのボタン付き

<Style x:Key="UsersTimeOffList" TargetType="{x:Type ListBoxItem}"> 
... 
<Grid> 
<Button x:Name="btnRemove" Content="Remove" Margin="0,10,40,0" Click="btnRemove_Click" /> 
</Grid> 
</Style> 

ありがとう:

は、ここに私のスタイル(のみ影響を受けるコード)です!

答えて

10

RoutedCommandをご覧ください。

次のようにどこかでMyClassの中にあなたのコマンドを定義します。今すぐ

<Button Command="{x:Static myclass.Login}" /> 
あなたは余分な情報については、CommandParameterを使用することができます

..

最後:

public static readonly RoutedCommand Login = new RoutedCommand(); 

今、このコマンドを使用してボタンを定義します少なくともあなたのコマンドを聞いてみましょう:

あなたはいくつかの素晴らしいものを行うことを望むクラスのコンストラクタでは、あなたが置く:

CommandBindings.Add(new CommandBinding(myclass.Login, ExecuteLogin)); 

またはXAMLで:

<UserControl.CommandBindings> 
     <CommandBinding Command="{x:Static myclass.Login}" Executed="ExecuteLogin" /> 
    </UserControl.CommandBindings> 

そして、あなたがいるCommandBindingが必要デリゲートを実装:

private void ExecuteLogin(object sender, ExecutedRoutedEventArgs e) 
    { 
      //Your code goes here... e has your parameter! 
    } 

ビジュアルツリーのどこでもこのコマンドを聞くことができます。

・ホープこれはあなたがまたCanExecuteがそう言う場合でも、あなたのコマンドが無効になりますCanExecuteデリゲートでいるCommandBindingを定義することができます:)

ここでPPSは別の例である

PS役立ちます:RoutedCommands in WPF

+0

おかげで多くのArcturus、それはまさに私が探していたものであり、それは簡単でした! – ScottG

0

リストボックスを格納するユーザーコントロール(.ascx)を作成できます。次に、ページのパブリックイベントを追加します。

Public Event btnRemove() 

その後のUserControl

RaiseEvent btnRemove() 

でボタンのクリックイベントにまた、単に他の方法などのイベントを通じてオブジェクトを渡すことができます。これにより、ユーザーコントロールがページに何を削除するかを伝えることができます。

6

をArcturusが投稿したように、RoutedCommandsはこれを実現する素晴らしい方法です。あなたのDataTemplateで唯一のボタンがありますただし、これは少し単純かもしれません:

あなたが実際にこのように、ホストリストボックスから任意のボタンのClickイベントを処理することができます内に含まれる

<ListBox Button.Click="removeButtonClick" ... /> 

任意のボタンをListBoxはクリックされるとそのイベントを発生させます。イベントハンドラ内から、e.OriginalSourceを使用して、クリックされたボタンへの参照を取得できます。

ListBoxItemsに複数のボタンがある場合、これはあまりにも単純ですが、多くの場合、正常に動作します。

関連する問題