1

グループボックスにいくつかのラジオボタンがあります。ボタンをランダムに選択すると、視覚的な観点からすべてが完全に機能し、新しいボタンが選択されるたびにイベントハンドラーが呼び出されます。

これで、値が変更されたときにコールバックを伴う依存関係プロパティができました。このコールバックプロシージャで任意のボタンのIsChecked値を読み取ると、ボタンが視覚的に選択されているにもかかわらず、値はFalseになります(これらはすべて同時に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??
    }
}
4

2 に答える 2

4

ラジオ ボタン グループに関する Microsoft のバグがあります。各ユーザー コントロールにラジオ ボタンのグループが含まれる同じユーザー コントロールの複数のインスタンスがある場合、1 つのインスタンスで選択を変更すると、他のすべてのインスタンスから選択が削除されます。

于 2011-10-09T15:25:46.470 に答える
0

うーん、ロジックはそのままです!

SwitchBox の 2 つの異なるインスタンスを使用していました。1 つは XAML によって正常に作成され、ボタンの実際の状態を表示していました。ただし、依存関係プロパティのコールバックによってアクセスされたのは、コードによって作成された (変更されていない) 秒でした。したがって、選択されていないラジオボタン。

于 2010-01-15T17:04:49.187 に答える