C # и WPF: программный контроль - PullRequest
3 голосов
/ 12 декабря 2008

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

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

Следующий код - это то, что я не понимаю. В основном я пытаюсь установить элемент управления "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());
    }
}

Спасибо

Ответы [ 2 ]

3 голосов
/ 13 декабря 2008

Вот один из способов сделать это. Сначала вы даете имя своей основной 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 голосов
/ 12 декабря 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...