7

ListBoxItems用に定義されたスタイルを持つListBoxがあります。このスタイルの中に、いくつかのラベルとボタンがあります。そのボタンの1つとして、自分のページ(またはそのスタイルを使用する任意のページ)で処理できるクリックイベントを定義したいと思います。ListBoxItemsスタイルからイベントを処理するために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>

ありがとう!

4

3 に答える 3

10

RoutedCommandを見てください。

次のように、 myclass のどこかにコマンドを定義します。

    public static readonly RoutedCommand Login = new RoutedCommand();

次のコマンドでボタンを定義します。

    <Button Command="{x:Static myclass.Login}"  />  

追加情報については CommandParameter を使用できます。

最後になりましたが、コマンドを聞き始めます。

良いことをしたいクラスのコンストラクターに、次のように配置します。

    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!
    }

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

お役に立てれば

PSまた、CanExecuteがそう言った場合にコマンドを無効にするCanExecuteデリゲートでCommandBindingを定義することもできます:)

PPS 別の例を次に示します。WPF の RoutedCommands

于 2008-08-26T14:51:05.203 に答える
6

Arcturus が投稿したように、RoutedCommands はこれを実現する優れた方法です。ただし、DataTemplate にボタンが 1 つしかない場合、これは少し簡単になる可能性があります。

次のように、実際には、ホスト ListBox から任意のボタンの Click イベントを処理できます。

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

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

ListBoxItems に複数のボタンがある場合、これは明らかに単純すぎますが、多くの場合、問題なく機能します。

于 2008-10-10T03:44:53.923 に答える
0

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

Public Event btnRemove()

次に、ユーザーコントロールのボタンクリックイベントで

RaiseEvent btnRemove()

他のメソッドと同じように、イベントを介してオブジェクトを渡すこともできます。これにより、ユーザーコントロールがページに何を削除するかを指示できるようになります。

于 2008-08-26T14:27:40.517 に答える