我想创建一个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方面取得了一些成功,但我不知道如何实现我的要求的第二部分。
答案 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)
这与您尝试做的类似,但使用的是新闻聚合器,但它的设置相同。而PrismV2对此非常有用。