弹出窗口中的WPF按钮不会触发并冻结控制



我有一个自定义控件弹出与mouseenter事件。弹出窗口和按钮显示良好。当我单击该按钮时,控件冻结并且不启动命令。要解冻,我得把窗口最小化。

弹出代码如下:

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

如果我使用Click=Button_NextButton,我会得到一个错误,说明:从文本"Button_NextButton"创建"Click"失败。

我已经更新了我的代码,并按照建议实现了RelayCommand类。我将绑定更改为

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

我确信我已经绑定了命令(通过改变东西,我打破了程序,所以它不会运行-例如:如果我删除sub,那么我得到一个sub不存在的错误),但是当我点击按钮时,同样的事情发生了。

按钮命令如下:

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

nCommand代码:Public Shared Button_PrevButton_Click As New RoutedCommand("Button_PrevButton_Click", GetType(MainWindow))

在主窗口中绑定:

所以基本上我知道编译器看到的东西,但当我实际点击它不传递它的子。任何进一步的想法?

按钮的Command属性应该绑定到对象集上的某个东西,作为实现iccommand接口的DataContext(如H.B.所提到的)。

实现这一点的一个简单方法是使用包含iccommand实现的许多机制的包装器类。这里有一篇关于MVVM的介绍性文章的链接,其中包含RelayCommand类的实现。

整篇文章读起来很棒,但是你可以直接跳到"中继命令逻辑"一节来查看实现。

希望有帮助!

如果你得到这样的错误,你在代码中创建的方法签名是错误的,例如指定MouseEventArgs而不是通用的RoutedEventArgs

除此之外,我认为这一点XAML没有问题,如果绑定实际上绑定到一个不做一些相当奇怪的事情的命令,它应该工作。事实上,按钮是在一个弹出应该不是一个问题。

相关内容

  • 没有找到相关文章

最新更新