C # и WPF: программный контроль

Я изучаю WPF и, кажется, нашел что-то немного странное, что я не могу найти причину, где бы я ни искал.

У меня есть окно с одним флажком под названием "chkTest". У меня установлено по умолчанию.

Следующий код - это то, что я не понимаю. В основном я пытаюсь установить элемент управления "chkTest" на элемент, который я создаю на лету. В окне сообщения отображается значение, которое я установил в коде, но элемент управления в окне все еще имеет значение true.

Может кто-нибудь объяснить процесс, стоящий за этим?

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();

        CheckBox chk = new CheckBox();
        chk.IsChecked = false;

        this.chkTest = chk;

        MessageBox.Show(chk.IsChecked.Value.ToString());
    }
}

Спасибо

12.12.2008 20:17:31
2 ОТВЕТА

Это потому, что вы обманываете систему DependencyProperty, делая это - помните, получатели / установщики свойств DP работают иначе, чем обычные свойства. Пользовательский интерфейс имеет триггер для свойства IsChecked, но вы заменяете весь объект. Поскольку вы фактически не меняли IsChecked на видимом флажке, триггер не срабатывает и пользовательский интерфейс не обновляется.

3
12.12.2008 20:23:59

Вот один из способов сделать это. Сначала вы даете имя своей основной Grid - скажем, LayoutRoot:

<Grid x:Name="LayoutRoot">
    <CheckBox x:Name="chkTest" IsChecked="True"></CheckBox>
</Grid>

Затем вы говорите:

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();

        CheckBox chk = new CheckBox();
        chk.IsChecked = false;

        LayoutRoot.Children.Remove(chkTest);
        LayoutRoot.Children.Add(chk);
    }
}

И вы сделали.

3
13.12.2008 05:18:03