ComboBox中的TabControl

时间:2010-01-06 21:57:30

标签: wpf combobox tabcontrol

我想创建一个ImagePicker控件,让用户从各种来源中选择图像。

一张图片胜过千言万语:I'm not yet cool enough to post images

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

基本上,我想在ComboBox的下拉列表中使用TabControl。 GoogleImage类型的所有项目都应显示在Google图片标签中,Bing图像标签中的BingImage项目等等。

我试图将我的TabControl放在ComboBox.ItemsPanelTemplate中,但是WPF不会让我,因为TabControl不是一个面板。

我在编辑ComboBox模板并将我的TabControl放入Popup方面取得了一些成功,但我不知道如何实现我的要求的第二部分。

2 个答案:

答案 0 :(得分:1)

我相信你需要为你的组合框创建一个自定义样式并重新定义它的PopUp部分。请查看此处:ComboBox ControlTemplate Example,了解有关如何自定义wpf组合框样式的详细信息。您的新Popup部分可能如下所示:

<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>

希望这有帮助,尊重

答案 1 :(得分:0)

Try this

这与您尝试做的类似,但使用的是新闻聚合器,但它的设置相同。而PrismV2对此非常有用。