Ответ 1
Используя следующий XML, вы можете определить элемент управления как общедоступное поле класса, чтобы иметь доступ к нему из других классов:
<CheckBox x:Name="myCheckBox" x:FieldModifier="public" />
Теперь вы можете получить доступ к полю непосредственно в коде:
if (win.myCheckBox.IsChecked.Value)
{
// ...
}
Я согласен с H.B., однако, что использование шаблона MVVM - лучший способ сделать это. Другие части вашего кода не должны знать о вашем пользовательском интерфейсе или напрямую обращаться к нему.
EDIT:
С помощью подхода MVVM вы должны сначала определить класс модели представления:
public class ViewModel
{
public bool IsChecked { get; set; }
}
Затем вы устанавливаете экземпляр этого класса как DataContext
:
- либо в коде, например. конструктор окна:
public MyWindow() { InitializeComponent(); DataContext = new ViewModel(); }
- или в XAML, например. 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>
Теперь вы можете привязать свой CheckBox к свойству в ViewModel:
<CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" />
Все, что осталось, - передать экземпляр 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);
}
}
Вы привязываете его к кнопке следующим образом:
<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}" />
Вам не нужно обрабатывать какие-либо события CheckBox
и Button
, все обрабатывается привязкой.
Если вы добавили свойство зависимостей в KinectSkeleton
, вы должны привязать его к модели представления:
<kt:KinectSkeleton ViewModelH="{Binding}" />