2011-07-16 10 views
1

mouseenterイベントでポップアップするカスタムコントロールにポップアップがあります。 ポップアップとボタンが正常に表示されます。 ボタンをクリックすると、コントロールがフリーズし、コマンドが実行されません。解凍するには、ウィンドウを最小化する必要があります。次のようにWPFボタンポップアップでコントロールが起動せず、フリーズする

ポップアップコードは次のとおりです。私はクリック= Button_NextButtonを使用する場合は

<Popup Name="Popup_PrevButton" 
     PlacementTarget="{Binding ElementName=PART_Button}" 
     Placement="Left" 
     StaysOpen="False" 
     AllowsTransparency="True" 
     PopupAnimation="Fade" 
     Focusable="True"> 
    <Grid> 
      <Button 
      Name="Button_PrevButton" 
      Margin="2,0,2,0" 
      Width="20" 
      Height="48" 
      BorderBrush="{TemplateBinding BorderBrush}" 
      BorderThickness="{TemplateBinding BorderThickness}" 
      Foreground="{TemplateBinding Foreground}" 
      Command="{Binding Path=Button_NextButton}"> 
      </Button> 
     </Grid> 
</Popup> 

私が示すエラーで取得: は、テキストから「をクリックしてください」「Button_NextButton」を作成できませんでした。

更新

私は自分のコードを更新し、提案されたようRelayCommandクラスを実装しています。私はそれが実行されませんので、私はプログラムを壊す事を変えることで(コマンドをバインドしていると確信してい

Command="{Binding Path=nCommand:CustomCommands.Button_Click}"> 

への結合を変更 - 例えば:私はサブを削除する場合は、その後、私はエラーを取得することサブは存在しません)、ボタンをクリックすると同じことが起こります。

次のようにボタンのコマンドは次のとおりです。nCommandため

Private Sub ON_Button_Click(ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs) 
    'Do something here 
End Sub 

コード:メインウィンドウにバインド新RoutedCommandのよう 公共共有Button_PrevButton_Click( "Button_PrevButton_Click"、メソッドGetType(メインウィンドウ))

基本的に私はコンパイラが物事を見ていることを知っていますが、実際にクリックすると、 サブ。それ以上の考え?

答えて

1

ボタンのCommandプロパティは、ICommandインターフェイスを実装するDataContextとして設定されたオブジェクトの何かにバインドする必要があります(前述のH.Bのように)。

これを実現する簡単な方法は、ICommand実装のメカニズムの多くを含むラッパークラスを使用することです。ここでは、これを行うRelayCommandクラスの実装を含む、MVVMの優れた入門記事にa linkがあります。

記事全体が読み物ですが、実装を確認するには、「コマンドロジックのリレー」セクションにスキップすることができます。

希望に役立ちます!

1

このようなエラーが発生した場合、コードで作成したメソッドシグネチャが間違っています。汎用RoutedEventArgsの代わりにMouseEventArgsと指定します。

XAMLのこのビットには問題はありません。バインディングが実際には奇妙なことをしないコマンドにバインドされていれば、それはうまくいくはずです。ボタンがポップアップの内側にあるということは問題ではないはずです。

関連する問題