Google 기술이 실패합니다. 누구나 WPF 용 컨트롤에 대해 들어 봤습니다. 나는 이것을 (winforms screenshot)처럼 보이게하려고 노력하고있다.체크 박스가 포함 된 WPF ComboBox 찾기
alt text http://www.angryhacker.com/toys/up.png
Google 기술이 실패합니다. 누구나 WPF 용 컨트롤에 대해 들어 봤습니다. 나는 이것을 (winforms screenshot)처럼 보이게하려고 노력하고있다.체크 박스가 포함 된 WPF ComboBox 찾기
alt text http://www.angryhacker.com/toys/up.png
당신은 자신을 콤보 상자의 DataTemplate을 설정하여이 작업을 수행 할 수 있습니다. This article은 어떻게리스트 박스를 보여 주나 원칙은 동일합니다.
here 아마도 더 잘 맞는 당신이 뭘 하려는지에 대한 또 다른 기사는 간단한 세트는 항목 템플릿의 첫 번째 열은 확인란하고 비즈니스 오브젝트에 부울에 바인딩합니다.
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}"
Width="20" />
<TextBlock Text="{Binding DayOfWeek}"
Width="100" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
다시 만들려면 어떻게해야합니까? 사용할 수있는 컨트롤이고 비즈니스 개체에 IsSelected를 추가하고 싶지 않습니까? –
Combobox로부터 상속받은 새로운 커스텀 컨트롤을 생성하고 컨트롤의 템플릿을 변경하여 팝업에있는 컨트롤을 체크 박스를 포함한리스트로 대체 할 수 있습니다. 컨트롤의 Checked 이벤트를 확인하고 속성을 통해 노출 할 수있는 체크 된 항목의 목록을 유지합니다. –
내 콤보 박스가 있습니다.
public class SelectableObject <T> {
public bool IsSelected { get; set; }
public T ObjectData { get; set; }
public SelectableObject(T objectData) {
ObjectData = objectData;
}
public SelectableObject(T objectData, bool isSelected) {
IsSelected = isSelected;
ObjectData = objectData;
}
}
를 그리고 두 개의 핸들러가 - 체크 박스를 처리하기위한 하나의 클릭과 콤보 상자의 텍스트를 형성 한 : 나는 데이터 소스에 대한 링크 Can a WPF ComboBox display alternative text when its selection is null?
<ComboBox Name="cbObjects" Grid.Column="1" Grid.Row="1" VerticalAlignment="Center" Margin="2,2,6,0" SelectionChanged="OnCbObjectsSelectionChanged" >
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}" Width="20" VerticalAlignment="Center" Checked="OnCbObjectCheckBoxChecked" Unchecked="OnCbObjectCheckBoxChecked" />
<TextBlock Text="{Binding ObjectData}" VerticalAlignment="Center" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock IsHitTestVisible="False" Name="tbObjects" Text="Выберите объекты..." Grid.Column="1" Grid.Row="1" VerticalAlignment="Center" Margin="6,2,6,0" />
작은 클래스에서 마틴 해리스 코드와 코드를 사용합니다. tblObject 내 객체, 내가 콤보 상자에 표시 할 목록의 유형입니다 ComboBox.ItemsSource를 들어
private void OnCbObjectCheckBoxChecked(object sender, RoutedEventArgs e) {
StringBuilder sb = new StringBuilder();
foreach (SelectableObject<tblObject> cbObject in cbObjects.Items)
if (cbObject.IsSelected)
sb.AppendFormat("{0}, ", cbObject.ObjectData.Description);
tbObjects.Text = sb.ToString().Trim().TrimEnd(',');
}
private void OnCbObjectsSelectionChanged(object sender, SelectionChangedEventArgs e) {
ComboBox comboBox = (ComboBox)sender;
comboBox.SelectedItem = null;
}
나는
ObservableCollection<SelectableObject<tblObject>>
를 사용합니다.
이 코드가 유용한 정보가 아닐까요?
SelectableObject라는 아이디어가 마음에 들었습니다. +1! –
imho StackPanel 및 템플릿의 TextBlock이 중복되어 있으므로 확인란의 Content 속성을 ObjectData에 바인딩 할 수 있습니다. – Taras
CheckComboBox에서 시도하십시오. Extended WPF Toolkit에서. 나에게 가장 큰 장점은 바인딩이 목록을 가지고있다 :
을. 또한 바인딩하는 컬렉션의 구성원 인 value
및 display
을 지정할 수 있습니다.
CheckComboBox
과 함께 다른 컨트롤을 가져 오지 않으려면 source code을 가져올 수 있습니다. 매우 간단합니다 (Selector class도 가져와야 함).
[다음은 멋진 사용자 정의 컨트롤 구현입니다.] (http://blogs.microsoft.co.il/blogs/justguy/archive/2009/01/19/wpf-combobox-with-checkboxes-as-items-it -will-even-update-on-the-fly.aspx)! [alt text] (http://blogs.microsoft.co.il/blogs/justguy/image_thumb_44E16700.png) –