如何在XAML public中创建一个控件,以便在其他类中看到

我正在使用wpf应用程序我在XAML中创建了一个复选框,然后我的代码调用了一个类中的函数,在这个函数中有一个if条件,它检查是否选中了复选框但是没有看到复选框在这堂课上,怎么做呢?

非常感谢

编辑:

以下是我所做的步骤:我在KinectSkeleton的同一项目下创建了ViewModel类,如下所示:ViewModel类:

public class ViewModel { public bool IsChecked { get; set; } public bool is_clicked { get; set; } } 

在KinectSkeleton中我定义了一个属性,如下所示:

 public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register("ViewModelH", typeof(ViewModel), typeof(KinectSkeleton), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender)); public ViewModel ViewModelH { get { return (ViewModel)GetValue(ViewModelProperty); } set { SetValue(ViewModelProperty, value); } } 

并且KinectWindow.xaml中的复选框和按钮的代码是:

 

并在KinectSkeleton中,我想检查我写的复选框的值:

  if (this.ViewModelH.IsChecked == false) // if(f.is_chekced==false) { // do something } 

现在我想知道在复选框的is_checked事件中写什么,并按下is_clicked按钮? 我的上述步骤中还有什么遗漏,因为我觉得到目前为止kinect骨架属性没有绑定到复选框is_checked值?

使用以下XML,您可以将控件定义为类上的公共字段,以便能够从其他类访问它:

  

现在您可以直接在代码中访问该字段:

 if (win.myCheckBox.IsChecked.Value) { // ... } 

不过我同意HB,使用MVVM模式是一种更好的方法。 代码的其他部分不应该知道您的UI或直接访问它。

编辑:

使用MVVM方法,您应该首先定义视图模型类:

 public class ViewModel { public bool IsChecked { get; set; } } 

然后将此类的实例设置为DataContext

  • 在代码中,例如窗口构造函数:
 public MyWindow() { InitializeComponent(); DataContext = new ViewModel(); } 
  • 或者在XAML中,例如App.xaml:
      

现在,您可以将CheckBox绑定到ViewModel中的属性:

  

剩下的就是将ViewModel实例传递给OnRender函数。 它存储在窗口的DataContext属性中。

编辑2:

顺便说一下:在你接受答案之前,你真的应该问过这个问题。

我不确定你试图使用is_clicked属性尝试什么。 要在单击按钮时设置此标志,您需要一个Command

 public class CalibrateCommand : ICommand { private ViewModel viewModel; public CalibrateCommand(ViewModel viewModel) { this.viewModel = viewModel; } public void Execute(object parameter) { viewModel.IsClicked = true; } public bool CanExecute() { return true; } } 

您将此命令的实例添加到视图模型:

 public class ViewModel { public bool IsChecked { get; set; } public bool IsClicked { get; set; } public ICommand CalibrateCommand { get; set; } public ViewModel() { CalibrateCommand = new CalibrateCommand(this); } } 

你将它绑定到按钮,如下所示:

  

您不需要处理CheckBoxButton任何事件,一切都由绑定处理。

如果您向KinectSkeleton添加了依赖项属性,则应将其绑定到视图模型:

  

不要让复选框对外可见,只需将复选框的当前状态传递给函数或类。 还要考虑将checkbox值绑定到DataContext的类,直接访问控件可以在WPF中的大部分时间内避免,另请参阅MVVM模式 。