Moje umiejętności w zakresie obsługi Google zawiodły mnie. Ktoś słyszał o takiej kontroli dla WPF. Próbuję sprawić, aby wyglądał tak (zrzut ekranu WinForm).Poszukuję WPF ComboBox z polami wyboru
alt text http://www.angryhacker.com/toys/up.png
Moje umiejętności w zakresie obsługi Google zawiodły mnie. Ktoś słyszał o takiej kontroli dla WPF. Próbuję sprawić, aby wyglądał tak (zrzut ekranu WinForm).Poszukuję WPF ComboBox z polami wyboru
alt text http://www.angryhacker.com/toys/up.png
Można to zrobić samemu ustawiając DataTemplate z pola kombi. This article pokazuje, jak - dla listbox, ale zasada jest taka sama.
Kolejny artykuł here jest chyba lepiej pasuje do tego, co staramy się robić, prosty zestaw pierwsza kolumna szablonu poz się wyboru i powiązać go z bool na swoim obiekcie biznesowym.
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}"
Width="20" />
<TextBlock Text="{Binding DayOfWeek}"
Width="100" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
Co jeśli chcesz utworzyć ponowne -użyteczne sterowanie i nie chcesz dodawać IsSelected do twoich obiektów biznesowych? –
Można utworzyć nowy kontrolek niestandardowy, który dziedziczy z programu Combobox i zmienić szablon kontrolki w celu zastąpienia kontrolki znajdującej się w wyskakującym okienku z listą zawierającą pola wyboru. Wysłuchaj zdarzenia Checked zdarzenia w formancie i utrzymuj listę sprawdzanych elementów, które możesz wyeksponować za pośrednictwem właściwości. –
Powinna to być
Istnieje mój combobox. Używam kod Martin Harris i kod z tego łącza 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" />
małej klasy dla źródła danych:
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;
}
}
I nie ma dwóch obsługi - jeden do obsługi CheckBox kliknął i jeden do tworzenia tekstu do ComboBox.
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;
}
Dla ComboBox.ItemsSource używam
ObservableCollection<SelectableObject<tblObject>>
gdzie tblObject jest rodzaj mojego obiektu, wykaz, który chcę wyświetlić w ComboBox.
Mam nadzieję, że ten kod przyda się komuś!
Podobał mi się pomysł SelectableObject. +1! –
imho StackPanel i TextBlock w szablonie są zbędne, mogą po prostu powiązać właściwość Content of checkbox z ObjectData. – Taras
Spróbuj przed CheckComboBox z Extended WPF Toolkit. Główną zaletą dla mnie jest o dwie listy do wiązania:
Uważam to podejście bardziej praktyczne. Ponadto możesz określić value
i display
członków powiązanych kolekcji.
Jeśli nie chcesz wnieść kilka innych kontroli z CheckComboBox
można uzyskać source code z nim, to całkiem proste (trzeba przynieść Selector class również).
[Tutaj jest ładne wdrożenie niestandardowej kontroli] (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) –