WPF RadioButton выбран в пользовательском интерфейсе, но код видится как IsChecked == false - PullRequest
1 голос
/ 15 января 2010

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

Теперь у меня есть свойство зависимости с обратным вызовом при изменении значения. Когда в этой процедуре обратного вызова я читаю значение IsChecked любой кнопки, значение равно False, несмотря на то, что кнопка визуально выбрана (они все ложные одновременно, странно). Отладчик также отображает все кнопки без флажка.

Ху, мне не хватает представления о причине после базовых проверок ...

<GroupBox>
    <StackPanel>
        <RadioButton x:Name="btNone"
            Content="Disconnected"
            IsChecked="True"
            Checked="OnSelChecked"/>
        <RadioButton x:Name="btManual"
            Content="Manual"
            Checked="OnSelChecked"/>
    </StackPanel>
</GroupBox>

Обработчик событий:

private void OnSelChecked(object sender, RoutedEventArgs e) {
    if (btManual.IsChecked == true) {
        // is called
    }
}

Свойство зависимости:

public static readonly DependencyProperty ManualProperty =
            DependencyProperty.Register("Manual",
            typeof(Position), typeof(SwitchBox),
            new FrameworkPropertyMetadata(null,
                FrameworkPropertyMetadataOptions.AffectsRender,
                new PropertyChangedCallback(OnManualChanged)));

Обратный вызов свойства зависимости:

private static void OnManualChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args) {
    SwitchBox box = sender as SwitchBox;
    if (box.btManual.IsChecked == true) {
        // never true, why??
    }
}

Ответы [ 2 ]

4 голосов
/ 09 октября 2011

Существует ошибка Microsoft с группой переключателей.Если у вас есть несколько экземпляров одного и того же пользовательского элемента управления, где каждый пользовательский элемент управления содержит группу переключателей, при изменении вашего выбора в одном экземпляре он удалит этот выбор из всех других экземпляров.

0 голосов
/ 15 января 2010

Гул, логика не повреждена!

Я использовал два разных экземпляра SwitchBox, один из которых был нормально создан XAML, и отображал фактическое состояние кнопок. Однако это была секунда, созданная кодом (и оставленная без изменений), к которой обратился обратный вызов свойства зависимостей. При этом невыбранные радиокнопки.

...