2013-02-18 3 views
4

я вновь стилизованной в ListBox, чтобы создать RadioButtonList из этого linkWPF RadioButtonList Установить как IsEnabled и IsChecked свойства из коллекции

Моего требования что-то вроде этого: я должен выбрать один элемент из ListBox в время (т. е. Одиночный Режим выбора). Также мне нужно отключить/включить ListBoxItem на основе свойства, которое привязывается к коллекции. Поэтому я поставил

IsChecked="{TemplateBinding IsSelected}" 

и связал IsEnabled свойства из моей коллекции.

IsEnabled="{Binding IsEnabled}" 

И результат выглядит следующим образом: enter image description here

Вы можете увидеть, что некоторые из записей в неактивном состоянии, но все же они selectable.If я удалить IsChecked свойства, она прекрасно работает как и ожидалось. Но мне нужны и IsEnabled & IsSelected функцияlaity. Затем я создаю многозначный конвертер для свойства IsEnabled и на основе значений, которые я связываю с соответствующим значением свойства. Теперь я не могу визуально выбрать отключенный элемент из списка. Но когда я выбираю отключенный элемент, я теряю выделение. Пожалуйста, проверьте изображение: enter image description here.

и в коде за IsChecked Недвижимость установлена ​​в первую запись. Я хочу ограничить этот выбор. Как я могу это сделать? Есть ли какие-либо настройки в xaml, которые помогут выполнить мои требования? Пожалуйста, советы ...

Заранее спасибо ....

ответ

1

Это звучит, как вы связывание IsEnabled свойства RadioButton вместо ListBoxItem. Это отключит RadioButton, но не ListBoxItem, поэтому его можно выбрать.

Вы должны уметь связать IsEnabled свойство ListBoxItem, и оно будет работать так, как вы хотите.

Основываясь на ссылке, которую вы собираетесь Написал стиль, который вы используете, это было бы в ItemContainerStyle части RadioButtonList стиля:

<Style TargetType="{x:Type ListBoxItem}" > 
    <!-- Here --> 
    <Setter Property="IsEnabled" Value="{Binding IsEnabled}" /> 

    <Setter Property="Margin" Value="5" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
       <Border BorderThickness="0" Background="Transparent"> 
        <RadioButton Focusable="False" 
           IsHitTestVisible="False" 
         IsChecked="{TemplateBinding IsSelected}"> 
         <ContentPresenter /> 
        </RadioButton> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style>