0

Panel から継承するコントロールがあります。このコントロールは、カスタム コントロールにバインドされたコレクションに基づいてボタン コントロールを作成します。子からの button.click イベントを処理するにはどうすればよいですか? これが私のXAMLです。コマンドは実行されません。

   <ScrollViewer HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
      <control:TreeContainer HorizontalAlignment="Center" 
                             Width="Auto" Height="Auto" Margin="8,8,8,8" VerticalBuffer="20" 
                             RootNode="{Binding Path=RootNode}" 
                             ChildrenNodes="{Binding Path=ChildrenNodes}">
         <i:Interaction.Triggers>
            <i:EventTrigger EventName="Button.Click">
               <cmd:EventToCommand Command="{Binding Path=TreeContainerClickCommand, Mode=OneWay}" PassEventArgsToCommand="True" />
            </i:EventTrigger>
         </i:Interaction.Triggers>
      </control:TreeContainer>
   </ScrollViewer>
4

1 に答える 1

0

コントロール内のすべてのボタンにスタイルを設定し、そこにコマンドをバインドできます。TreeContainer にStyle を追加するとTargetType="Button"、TreeContainer 内のすべてのボタンに適用されます。

<ScrollViewer HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<control:TreeContainer HorizontalAlignment="Center" 
                         Width="Auto" Height="Auto" Margin="8,8,8,8" VerticalBuffer="20" 
                         RootNode="{Binding Path=RootNode}" 
                         ChildrenNodes="{Binding Path=ChildrenNodes}">
  <control:TreeContainer.Resources>
    <Style TargetType="Button">
      <Setter Property="Command" Value="{Binding Path=TreeContainerClickCommand, Mode=OneWay}"/>
    </Style>
  </control:TreeContainer.Resources>
 </control:TreeContainer>

ボタンで TreeContainer ViewModel にアクセスできない場合は、RelativeSource 経由でアクセスする必要があります。

<Setter Property="Command" 
        Value="{Binding Mode=OneWay,
                        Path=DataContext.TreeContainerClickCommand,
                        RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type control:TreeContainer}}}" />

DataContext.*Source はTreeContainerViewModel ではなく であるため、Path を に変更する必要があることに注意してください。

EventTrigger編集:を取得するためにが本当に必要な場合EventArgsは、ボタンのテンプレートを使用して上記と同じことを行うことができます。次に、インタラクション トリガーを使用できる新しいテンプレートを定義できます。

于 2013-10-30T15:05:55.700 に答える