vez una tutorial propiedades propiedad mas etiquetas establecida esta español ejemplos content aplicacion c# wpf xaml checkbox kinect

c# - una - Cómo hacer público un control en XAML para ser visto en otras clases



wpf c# ejemplos (2)

No haga que la casilla de verificación sea visible hacia el exterior, simplemente pase el estado actual de la casilla de verificación a la función o clase. También considere binding el valor de la casilla de verificación a una clase en el DataContext , el acceso directo a los controles se puede evitar la mayor parte del tiempo en WPF, vea también el patrón MVVM .

Estoy trabajando en la aplicación wpf. Hice una casilla de verificación en el XAML, luego mi código llama a una función en una clase y en esta función hay una condición if en la que se comprueba si la casilla de verificación está marcada o no, pero no se ve en esta clase, entonces, ¿cómo hacer esto?

Muchas gracias

EDITAR:

Aquí están los pasos que hice: creé la clase ViewModel en el mismo proyecto de KinectSkeleton como se muestra: clase ViewModel:

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

y en el KinectSkeleton definí una propiedad como se muestra:

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); } }

y el código de la casilla de verificación y el botón en KinectWindow.xaml es:

<Button Content="Calibrate" Height="24" x:Name="Calibrate" x:FieldModifier="public" Width="90" Click="Calibrate_Click" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" HorizontalAlignment="Left" DockPanel.Dock="Left" Panel.ZIndex="0" Padding="0" VerticalAlignment="Center" /> <CheckBox IsChecked="{Binding Mode=TwoWay, Path=IsChecked}" Content="AngleDifference" Height="22" x:Name="AngleDifference" x:FieldModifier="public" Width="117" Checked="AngleDifference_Checked" Unchecked="AngleDifference_Unchecked" HorizontalAlignment="Left" VerticalAlignment="Center" Panel.ZIndex="1" HorizontalContentAlignment="Left" />

y en el KinectSkeleton donde quiero verificar el valor de la casilla de verificación escribo:

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

¿Ahora quiero saber qué escribir en el evento is_checked del checkbox y is_clicked del botón? También hay algo que falta en mis pasos anteriores, ya que siento que hasta ahora la propiedad del esqueleto kinect no está vinculada al valor is_checked de la casilla de verificación.


Usando el siguiente XML puede definir un control como un campo público en la clase para poder acceder a él desde otras clases:

<CheckBox x:Name="myCheckBox" x:FieldModifier="public" />

Ahora puedes acceder al campo directamente en el código:

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

Sin embargo, estoy de acuerdo con HB, que usar el patrón MVVM es una mejor manera de hacerlo. Otras partes de su código no deben conocer su UI o acceder directamente a ella.

EDITAR:

Con el enfoque de MVVM, primero debe definir su clase de modelo de vista:

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

A continuación, establece una instancia de esta clase como DataContext :

  • ya sea en código, por ejemplo, constructor de ventana:

public MyWindow() { InitializeComponent(); DataContext = new ViewModel(); }

  • o en XAML, por ejemplo, App.xaml:

<Application x:Class="WpfApplication2.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:vm="clr-namespace:WpfApplication2" StartupUri="MainWindow.xaml"> <Application.Resources> <vm:ViewModel x:Key="ViewModel" /> </Application.Resources> </Application>

Ahora puede vincular su CheckBox a una propiedad en ViewModel:

<CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" />

Todo lo que queda es pasar la instancia de ViewModel a su función OnRender . Se almacena en la propiedad DataContext de su ventana.

EDIT 2:

BTW: Realmente deberías haber preguntado eso antes de aceptar la respuesta.

No estoy seguro de qué intentas intentar con la propiedad is_clicked . Para establecer este indicador cuando se hace clic en el botón, necesita un 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; } }

Agrega una instancia de este comando a su modelo de vista:

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

Lo atas al botón así:

<Button Content="Calibrate" Height="24" x:Name="Calibrate" x:FieldModifier="public" Width="90" Click="Calibrate_Click" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" HorizontalAlignment="Left" DockPanel.Dock="Left" Panel.ZIndex="0" Padding="0" VerticalAlignment="Center" Command="{Binding CalibrateCommand}" />

No es necesario que maneje ningún evento de CheckBox y Button , todo se maneja mediante el enlace.

Si agregó una propiedad de dependencia a KinectSkeleton , debe vincularla al modelo de vista:

<kt:KinectSkeleton ViewModelH="{Binding}" />