2009-07-27 15 views
0

は、多くの場合、ここで答えを見つけましたが、今の私の最初の時間をそれ `s;)ボタン:ClickMode値(プレス/リリース)に応じて、異なるDelegateCommandsバインディング

我々はDelegateCommandsと一緒にMVVMパターンを使用します。だから、通常私はこのようなボタンにコマンドをバインドします

<Button Command="{Binding SetXYZActivatedCommand}" /> 

私はボタンが押されたときに、ボタンが再び解放されたときに別のコマンドを実行する必要があります。私の考えは以下の通りであった:

<Button Grid.Row="3" x:Name="TestButtonObj" Content="asdlknm"> 
    <Button.Template> 
     <ControlTemplate TargetType="{x:Type Button}"> 
      <Border x:Name="border" CornerRadius="80" Background="LightBlue"> 
       <ContentPresenter Name="content" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
      </Border> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsPressed" Value="True"> 
       <Setter TargetName="border" Property="Background" Value="Aqua" /> 
       <Setter TargetName="content" Property="Content" Value="Pressed" /> 
       </Trigger> 
       <Trigger Property="ClickMode" Value="Press"> 
       <Setter TargetName="TestButtonObj" Property="Command" Value="{Binding SetPttDeactivatedCommand}" /> 
       </Trigger> 
       <Trigger Property="ClickMode" Value="Release"> 
       <Setter Property="Button.Command" Value="{Binding SetPttActivatedCommand}" /> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

問題はTestButtonObjが不明であることです。私は受け入れました、私は親オブジェクトにアクセスすることはできません。 Without TargetName = "TestButtonObj"コンパイルされますが、コマンドは実行されません。 Mhhhh ...これで

<Button Grid.Row="2" Content="CommandBindings"> 
<Button.CommandBindings> 
    <CommandBinding Command="{Binding SetPttActivatedCommand}" /> 
</Button.CommandBindings> 

(うまくいけば、あなたがこの迷路の外に私を得る)いるCommandBindingは、依存関係プロパティではありません...

[OK]を、私は次のことを試してみましたが、それが動作することはできません私がついたポイント。私は方法が完全に間違っていたかどうかはわかりません。私はコマンドとバインディングについての一日のドキュメントを読んだが、私は手がかりを得ていない。誰かが私に道を見せてくれることを願っています。

私は今朝もまたここに投稿しました: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/cc68b10c-4e1c-4344-9f00-710185d4b1b0 回答が得られたら、私もここに投稿します。

答えて

1

AttachedCommandBehaviorライブラリを使用してください。それはあなたが同じコントロールに複数のコマンドをバインドすることができます:

<Button Grid.Row="3" x:Name="TestButtonObj" Content="asdlknm"> 
    <local:CommandBehaviorCollection.Behaviors> 
    <local:BehaviorBinding Event="MouseLeftButtonDown" Action="{Binding SetPttDeactivatedCommand}" /> 
    <local:BehaviorBinding Event="MouseLeftButtonUp" Command="{Binding SetPttActivatedCommand}" /> 
    ... 
    </local:CommandBehaviorCollection.Behaviors> 
</Button> 
+0

おかげさまで、うまくいけば、明日私はもう少し調査する時間があります...私はライセンス情報を見たことがありません:私たちはそれを使うことができますか?商用アプリでは? – TottiW

+0

私はライセンスがあるとは思わない。著者は次のように述べています。「このコードはテストされておらず、バグなどが予想されます。生産コードでこれを使用する場合は、自己責任で実行してください」 –

+0

最終目標は何かわかりませんがボタンが押されている間だけアクションを実行する必要がある場合は、ReapeatButtonを見て、クリックされている限り、クリックイベントを連続的に発生させます。 –

0

、(事前に)そんなに トッティをありがとう、あなたはバインディングに名前を設定しようとしましたか?

<Setter Property="Command" Value="{Binding ElementName=TestButtonObj, Path=SetPttDeactivatedCommand}" /> 
+0

今、私はそれを試してみました - しかし、成功せず:( doesnの 'tものブレークポイントで停止します。 公共のICommandは どこDelegateCommandをSetPttDeactivetedCommantインスタンス化する必要があります – TottiW

+0

バインディングが双方向であるかどうかを確認します。それ以外の場合、設定子がテンプレート外の名前付き要素で動作しない可能性があります... –

+0

TwoWayバインディングは問題ありませんでした。 – TottiW

関連する問題