TabControl в ComboBox - PullRequest
       24

TabControl в ComboBox

1 голос
/ 07 января 2010

Я хотел бы создать элемент управления ImagePicker, который позволит пользователям выбирать изображения из различных источников.

Картинка стоит тысячи слов: Я еще недостаточно крут, чтобы публиковать изображения

<ComboBox>
    <local:GoogleImage/>
    <local:GoogleImage/>
    <local:GoogleImage/>
    <local:BingImage/>
    <local:BingImage/>
</ComboBox>

По сути, я хочу TabControl в раскрывающемся списке ComboBox. Все элементы типа GoogleImage должны отображаться на вкладке Google Images, элементы BingImage на вкладке Bing Images и т. Д.

Я пытался поместить свой TabControl в ComboBox.ItemsPanelTemplate, но WPF не позволил мне, потому что TabControl не является панелью.

Мне удалось отредактировать шаблон ComboBox и поместить мой TabControl во всплывающее окно, но я не знаю, как реализовать вторую часть моих требований.

Ответы [ 2 ]

1 голос
/ 07 января 2010

Полагаю, вам нужно создать собственный стиль для вашего комбинированного списка и переопределить его раздел всплывающих окон. Пожалуйста, проверьте здесь: Пример ComboBox ControlTemplate для получения подробной информации о том, как настроить стиль для комбинированного списка wpf. Ваш новый раздел всплывающих окон может выглядеть следующим образом:

<Window.Resources>
...
<Style x:Key="{x:Type ComboBox}" TargetType="ComboBox">
     ...
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ComboBox">
                <Grid>
                    <ToggleButton ...>
                    </ToggleButton>
                    <ContentPresenter ... />
                    <TextBox x:Name="PART_EditableTextBox" .../>
                    <Popup 
                          Name="Popup"
                          Placement="Bottom"
                          IsOpen="{TemplateBinding IsDropDownOpen}"
                          AllowsTransparency="True" 
                          Focusable="False"
                          PopupAnimation="Slide">
                        <Grid 
                            Name="DropDown"
                            SnapsToDevicePixels="True"                
                            MinWidth="{TemplateBinding ActualWidth}"
                            MaxHeight="{TemplateBinding MaxDropDownHeight}">
                            <Border 
                                  x:Name="DropDownBorder"
                                  Background="{StaticResource WindowBackgroundBrush}"
                                  BorderThickness="1"
                                  BorderBrush="{StaticResource SolidBorderBrush}"/>

                            <TabControl>
                                <TabItem Header="Google">
                                    <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
                                        <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" />
                                    </ScrollViewer>
                                </TabItem>
                                <TabItem Header="Bing">
                                    <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
                                        <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" />
                                    </ScrollViewer>
                                </TabItem>
                                <TabItem Header="Computer">
                                    <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
                                        <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" />
                                    </ScrollViewer>
                                </TabItem>
                        </TabControl>
                        </Grid>
                    </Popup>
                </Grid>
                <ControlTemplate.Triggers>
                   ...
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
       ...
    </Style.Triggers>
</Style>
...
</Window.Resources>

надеюсь, это поможет, с уважением

0 голосов
/ 07 января 2010

Попробуйте это

Это похоже на то, что вы пытаетесь сделать, но с использованием агрегатора новостей, но это тот же тип настройки. И PrismV2 отлично подходит для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...