2014-04-18 99 views
1

我有一個ListBox,其中包含由RadioButtons組成的項目。它們是通過爲其提供ItemsSource動態創建的。下面是ListBox的XAML:已禁用RadioButton仍然可以選擇

<ListBox 
    Margin="20,5,0,0" 
    Width="Auto" 
    Background="Transparent" 
    BorderThickness="0" 
    BorderBrush="Transparent" 
    DisplayMemberPath="DisplayValue" 
    SelectedValuePath="Value" 
    SelectedItem="{Binding Path=SingleAnswer}" 
    ItemsSource="{Binding Path=AnswerOptions}"> 
    <!-- KLG Score ItemsSource converter to filter out 'Unable to Assess' --> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
     <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBox.Resources> 
     <Style TargetType="{x:Type ListBoxItem}"> 
     <Setter Property="Margin" Value="0,0,25,0" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
        <Border Background="Transparent" BorderThickness="0" BorderBrush="Transparent"> 
        <Border.IsEnabled> 
         <MultiBinding Converter="{StaticResource RadioButtonToEnabledConverter}" > 
          <Binding Mode="OneWay" ElementName="this" Path="ParentForm.ImagesExist"/> 
          <Binding Mode="OneWay" Path="." /> 
         </MultiBinding> 
        </Border.IsEnabled> 
        <RadioButton Focusable="False" IsHitTestVisible="False" IsChecked="{Binding Path=IsSelected, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" Click="KLGScoreRadioButton_Click" > 
         <RadioButton.IsEnabled> 
          <MultiBinding Converter="{StaticResource RadioButtonToEnabledConverter}" > 
           <Binding Mode="OneWay" ElementName="this" Path="ParentForm.ImagesExist"/> 
           <Binding Mode="OneWay" Path="." /> 
          </MultiBinding> 
         </RadioButton.IsEnabled> 
         <ContentPresenter /> 
        </RadioButton> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     </Style> 
    </ListBox.Resources> 
</ListBox> 

現在,答案應該不能夠由用戶選擇,只應自動填充這取決於商業邏輯指定。

爲此,我爲RadioButton.IsEnabled屬性創建了一個轉換器,以始終將指定的RadioButton設置爲禁用狀態。這有效;在應用程序中它被適當地禁用。但是,如果用戶點擊禁用選項,它仍然允許它被選中。我也嘗試在父項Border上使用相同的轉換器(如上面的xaml所示),但行爲不變。

我也試過在的Click事件中添加一個偵聽器,如果它們選擇禁用選項,將其設置爲處理,但該事件由於某種原因未被觸發。

無論如何不允許用戶選擇此選項嗎?

+0

爲什麼downvote ...? – Saggio

+0

您是否嘗試在觸發器中將IsHitTestVisible設置爲false? – whoisthis

回答

3

如果您希望不選擇特定條目,則可以在ListBoxItem樣式中綁定該項目的IsHitTestVisible。

這樣的事情,

<Setter Property="IsHitTestVisible" Value="{Binding IsSelectable}" /> 

其中IsSelectable是您的數據。

+0

完美!使用轉換器將'IsHitTestVisible'設置爲false,以禁用'RadioButton',謝謝! – Saggio

相關問題