WPF - поле со списком, содержащее кнопку - PullRequest
0 голосов
/ 31 января 2011

У меня есть элемент управления ComboBox в окне. Я читаю элементы, которые составляют ComboBox во время выполнения из файла XML. Что я хотел бы сделать, так это включить объект Button в каждый элемент, чтобы, если пользователь нажимает кнопку, я мог предпринять соответствующие действия на основе элемента, связанного с кнопкой. Когда пользователь выпадает из списка, это может выглядеть примерно так:

Item 1         [Button]
Another Item   [Button]
Item 3         [Button]

У меня недостаточно опыта работы с WPF, чтобы знать, возможно ли это, но сотрудник сказал, что это выполнимо. Кто-нибудь делал это или знает, как это можно сделать? Помните, что элемент управления ComboBox создается с помощью XAML, но элементы создаются во время выполнения.

1 Ответ

6 голосов
/ 31 января 2011

Вот один из способов:

<ComboBox x:Name="MyComboBox" VerticalAlignment="Top" HorizontalAlignment="Left">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>

                        <Label Content="{Binding}" Width="100" />
                        <Button Grid.Column="1">Do Something</Button>
                    </Grid>

                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

И в приведенном ниже коде я использовал простой список строк:

List<String> strings = new List<string>();

strings.Add("Item 1");
strings.Add("Another Item");
strings.Add("Item 3");

MyComboBox.ItemsSource = strings;

И вот как это выглядело:

enter image description here

РЕДАКТИРОВАТЬ: Вот ресурс о том, как добавить сетку в раскрывающийся список ComboBox (это выходит за рамки ответа SO):

http://www.eggheadcafe.com/tutorials/aspnet/e8585e81-34c8-4808-ae3e-b8b35d738842/wpf-datagrid-as-combobox.aspx

...