グループボックスにいくつかのラジオボタンがあります。ボタンをランダムに選択すると、視覚的な観点からすべてが完全に機能し、新しいボタンが選択されるたびにイベントハンドラーが呼び出されます。
これで、値が変更されたときにコールバックを伴う依存関係プロパティができました。このコールバックプロシージャで任意のボタンの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??
}
}