2010-01-15 1 views
1

그룹 상자에 라디오 버튼이 있습니다. 무작위로 버튼을 선택하면 시각적 인 관점에서 모두 완벽하게 작동하며 새 버튼을 선택할 때마다 이벤트 핸들러가 호출됩니다.UI에서 WPF RadioButton이 선택되었지만 코드에서 IsChecked == false로 표시됨

값이 변경되면 콜백에 대한 종속성 속성이 생깁니다. 이 콜백 프로 시저에서 어떤 버튼의 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?? 
    } 
} 

답변

0

흠, 논리는 손상되지 않았습니다!

두 개의 다른 SwitchBox 인스턴스를 사용했습니다. 하나는 XAML에서 정상적으로 생성되었으며 버튼의 실제 상태가 표시되었습니다. 그러나 그것은 의존성 프로퍼티 콜백에 의해 액세스 된 코드에 의해 생성 된 (그리고 변경되지 않은 채로 남아있는) 초입니다. 따라서 선택되지 않은 라디오 버튼.

4

라디오 버튼 그룹에 Microsoft 버그가 있습니다. 각 사용자 정의 컨트롤에 라디오 버튼 그룹이 포함 된 동일한 사용자 컨트롤의 인스턴스가 여러 개있는 경우 한 인스턴스에서 선택 항목을 변경하면 다른 모든 인스턴스에서 선택 항목이 제거됩니다.

+0

향후 참조 용으로 GroupNames의 문제에 대한 자세한 설명은 여기 (http://stackoverflow.com/a/17287651/968003)입니다. –

+0

나는이 문제를 추적하려고 애 쓰고 있습니다. 여기에 있습니다. , 내가 알지 못했던 알려진 버그. 감사! – Randolpho

관련 문제