2009-06-16 7 views
1

인덱스를 통해 항목 속성에 액세스하여 WPF ComboBox의 첫 x 항목을 제외한 모든 항목을 비활성화하는 방법이 있습니까?콤보 박스 항목을 비활성화하는 방법?

편집 :

ComboBoxItem DiffieHellmanItem = (ComboBoxItem)comboboxName.ItemContainerGenerator.ContainerFromIndex(i)); 

내가 콤보 상자의 항목을 비활성화 실제로 방법을 알고하지 않습니다

답변

2

편집 : ComboBoxItems를 사용하는 방법을 찾은 것 같습니다. 또한 ItemContainerStyle을보고 (사용할 수있는 데이터 바인딩이 있는지 확인하십시오 (항목에 Enabled 속성이 있거나 유사한 항목이있는 경우).

그러나 데이터 바인딩을 수행하는 방법에 따라 DataTemplates를 사용하여 다른 "브러시", "불투명도"등에서 "비활성화"항목을 표시 할 수 있습니다. Bea Stollnitz는 그 약 here에 관한 좋은 게시물을 가지고 있습니다.

UX 관점에서 고려해야 할 사항 중 하나는 숨겨진 것과 달리 사용할 수 없도록 설정하려는 이유입니다. 사용자가 클릭 할 수없는 것들로 가득 찬 ComboBox를 갖지 않도록 활용할 수있는 점진적 공개 전략이 있습니까?

+0

잘 DataTriggers을 사용하는 것입니다. 문제는 오히려 ComboBoxItems를 반복하거나 색인을 통해 액세스하는 방법을 찾지 못했기 때문입니다. –

+0

새로운 것을 매일 배우십시오. DataBinding과 컨테이너 생성을 활용하여 코드 숨김 외부에서이를 수행하는 방법이 되었습니까? – micahtan

0

을 작동하지만, 당신이 있는지 확인 할 당신의 OnClick 이벤트에 로직을 추가 할 수 있어야 선택한 항목의 색인은> = x이며이를 기반으로 요청 된 모든 작업을 허용하지 않습니다.

2

콤보 상자에서 ItemContainerStyle을 설정할 수 있습니다. 블렌드에서 - 현재의 복사본을 만들어이 템플릿을 가져옵니다. 템플릿에서 IsEnabled 속성을 Setter로 설정하고 바인딩 할 값에 바인딩 할 수 있습니다.

<Style x:Key="ComboBoxItemStyle1" TargetType="{x:Type ComboBoxItem}"> 
      ... 
      <Setter Property="IsEnabled" Value="{Binding Active}"/> 
      ... 
     </Style> 
0

이럴 가장 좋은 방법은 나뿐만 아니라 그들을 숨길 수

<ComboBox.ItemContainerStyle> 
    <Style TargetType="ComboBoxItem"> 
     <Style.Triggers> 
      <DataTrigger *insert condition*> 
       <Setter Property="IsEnabled" Value="False"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</ComboBox.ItemContainerStyle> 
관련 문제