locked
Empty comboBox--display some 'list is empty' text? RRS feed

  • Question

  • There are cases where ComboBox drop downs will be empty...rather than showing a popup that's nearly collapsed, I'd like to display some text in the popup indicating to the user that there are no choices available.

    I've tried creating a collapsed textbox and then a trigger where the textbox becomes visible when ItemsPresenter.DataContext=Null...but unfortunately that doesn't work.

    Is there a trigger I can tie the event to display my textbox when there is nothing in the ItemsPresenter?


    Purkiss

    Friday, March 23, 2012 4:00 PM

All replies

  • You can add an element to your ItemsSource in XAML that's conditionally visible. Here's an example over on stackoverflow.com:http://stackoverflow.com/questions/1188402/wpf-combobox-with-empty-item

    Hope that helps.

    Friday, March 23, 2012 6:46 PM
  • Another option would be to place a textBlock on your comboBox.

    							<TextBlock TextWrapping="Wrap" Text="No Items Available" VerticalAlignment="Bottom" Margin="3,0,22,3" Foreground="#FF8B8B8B" FontStyle="Italic">
    								<i:Interaction.Triggers>
    									<ei:DataTrigger Binding="{Binding Items.Count, ElementName=myComboBox, Mode=OneWay}" Value="0">
    										<ei:ChangePropertyAction PropertyName="Visibility">
    											<ei:ChangePropertyAction.Value>
    												<Visibility>Visible</Visibility>
    											</ei:ChangePropertyAction.Value>
    										</ei:ChangePropertyAction>
    									</ei:DataTrigger>
    									<ei:DataTrigger Binding="{Binding Items.Count, ElementName=myComboBox, Mode=OneWay}" Value="0" Comparison="GreaterThan">
    										<ei:ChangePropertyAction PropertyName="Visibility">
    											<ei:ChangePropertyAction.Value>
    												<Visibility>Collapsed</Visibility>
    											</ei:ChangePropertyAction.Value>
    										</ei:ChangePropertyAction>
    									</ei:DataTrigger>
    								</i:Interaction.Triggers>
    							</TextBlock>

    The data trigger is bound to the count of items in the comboBox.

    I had originally put it in the template but it wasn't working.

    ~Christine

    I'm a ditz today. :)  It actually will work in the template.  Just placing the above code after the ContentPresenter in the style.


    <Window
    	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    	xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" mc:Ignorable="d"
    	x:Class="WpfApplication1.MainWindow"
    	x:Name="Window"
    	Title="MainWindow"
    	Width="640" Height="480">
    
    	<Window.Resources>
    		<Style x:Key="ComboBoxFocusVisual">
    			<Setter Property="Control.Template">
    				<Setter.Value>
    					<ControlTemplate>
    						<Rectangle Margin="4,4,21,4" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
    					</ControlTemplate>
    				</Setter.Value>
    			</Setter>
    		</Style>
    		<LinearGradientBrush x:Key="ButtonNormalBackground" EndPoint="0,1" StartPoint="0,0">
    			<GradientStop Color="#F3F3F3" Offset="0"/>
    			<GradientStop Color="#EBEBEB" Offset="0.5"/>
    			<GradientStop Color="#DDDDDD" Offset="0.5"/>
    			<GradientStop Color="#CDCDCD" Offset="1"/>
    		</LinearGradientBrush>
    		<SolidColorBrush x:Key="ButtonNormalBorder" Color="#FF707070"/>
    		<Geometry x:Key="DownArrowGeometry">M 0 0 L 3.5 4 L 7 0 Z</Geometry>
    		<Style x:Key="ComboBoxReadonlyToggleButton" TargetType="{x:Type ToggleButton}">
    			<Setter Property="OverridesDefaultStyle" Value="true"/>
    			<Setter Property="IsTabStop" Value="false"/>
    			<Setter Property="Focusable" Value="false"/>
    			<Setter Property="ClickMode" Value="Press"/>
    			<Setter Property="Template">
    				<Setter.Value>
    					<ControlTemplate TargetType="{x:Type ToggleButton}">
    						<Microsoft_Windows_Themes:ButtonChrome x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}" SnapsToDevicePixels="true">
    							<Grid HorizontalAlignment="Right" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}">
    								<Path x:Name="Arrow" Data="{StaticResource DownArrowGeometry}" Fill="Black" HorizontalAlignment="Center" Margin="3,1,0,0" VerticalAlignment="Center"/>
    							</Grid>
    						</Microsoft_Windows_Themes:ButtonChrome>
    						<ControlTemplate.Triggers>
    							<Trigger Property="IsChecked" Value="true">
    								<Setter Property="RenderPressed" TargetName="Chrome" Value="true"/>
    							</Trigger>
    							<Trigger Property="IsEnabled" Value="false">
    								<Setter Property="Fill" TargetName="Arrow" Value="#AFAFAF"/>
    							</Trigger>
    						</ControlTemplate.Triggers>
    					</ControlTemplate>
    				</Setter.Value>
    			</Setter>
    		</Style>
    		<LinearGradientBrush x:Key="TextBoxBorder" EndPoint="0,20" MappingMode="Absolute" StartPoint="0,0">
    			<GradientStop Color="#ABADB3" Offset="0.05"/>
    			<GradientStop Color="#E2E3EA" Offset="0.07"/>
    			<GradientStop Color="#E3E9EF" Offset="1"/>
    		</LinearGradientBrush>
    		<Style x:Key="ComboBoxEditableTextBox" TargetType="{x:Type TextBox}">
    			<Setter Property="OverridesDefaultStyle" Value="true"/>
    			<Setter Property="AllowDrop" Value="true"/>
    			<Setter Property="MinWidth" Value="0"/>
    			<Setter Property="MinHeight" Value="0"/>
    			<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
    			<Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
    			<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
    			<Setter Property="Template">
    				<Setter.Value>
    					<ControlTemplate TargetType="{x:Type TextBox}">
    						<ScrollViewer x:Name="PART_ContentHost" Background="Transparent" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>
    					</ControlTemplate>
    				</Setter.Value>
    			</Setter>
    		</Style>
    		<Style x:Key="ComboBoxToggleButton" TargetType="{x:Type ToggleButton}">
    			<Setter Property="OverridesDefaultStyle" Value="true"/>
    			<Setter Property="IsTabStop" Value="false"/>
    			<Setter Property="Focusable" Value="false"/>
    			<Setter Property="ClickMode" Value="Press"/>
    			<Setter Property="Template">
    				<Setter.Value>
    					<ControlTemplate TargetType="{x:Type ToggleButton}">
    						<Microsoft_Windows_Themes:ButtonChrome x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}" RoundCorners="false" SnapsToDevicePixels="true" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}">
    							<Path x:Name="Arrow" Data="{StaticResource DownArrowGeometry}" Fill="Black" HorizontalAlignment="Center" Margin="0,1,0,0" VerticalAlignment="Center"/>
    						</Microsoft_Windows_Themes:ButtonChrome>
    						<ControlTemplate.Triggers>
    							<Trigger Property="IsChecked" Value="true">
    								<Setter Property="RenderPressed" TargetName="Chrome" Value="true"/>
    							</Trigger>
    							<Trigger Property="IsEnabled" Value="false">
    								<Setter Property="Fill" TargetName="Arrow" Value="#AFAFAF"/>
    							</Trigger>
    						</ControlTemplate.Triggers>
    					</ControlTemplate>
    				</Setter.Value>
    			</Setter>
    		</Style>
    		<ControlTemplate x:Key="ComboBoxEditableTemplate" TargetType="{x:Type ComboBox}">
    			<Grid x:Name="Placement" SnapsToDevicePixels="true">
    				<Grid.ColumnDefinitions>
    					<ColumnDefinition Width="*"/>
    					<ColumnDefinition Width="Auto"/>
    				</Grid.ColumnDefinitions>
    				<Popup x:Name="PART_Popup" AllowsTransparency="true" Grid.ColumnSpan="2" IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" Placement="Bottom">
    					<Microsoft_Windows_Themes:SystemDropShadowChrome x:Name="Shdw" Color="Transparent" MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{Binding ActualWidth, ElementName=Placement}">
    						<Border x:Name="DropDownBorder" BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}" BorderThickness="1" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}">
    							<ScrollViewer x:Name="DropDownScrollViewer">
    								<Grid RenderOptions.ClearTypeHint="Enabled">
    									<Canvas HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0">
    										<Rectangle x:Name="OpaqueRect" Fill="{Binding Background, ElementName=DropDownBorder}" Height="{Binding ActualHeight, ElementName=DropDownBorder}" Width="{Binding ActualWidth, ElementName=DropDownBorder}"/>
    									</Canvas>
    									<ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    								</Grid>
    							</ScrollViewer>
    						</Border>
    					</Microsoft_Windows_Themes:SystemDropShadowChrome>
    				</Popup>
    				<Microsoft_Windows_Themes:ListBoxChrome x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.ColumnSpan="2" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderFocused="{TemplateBinding IsKeyboardFocusWithin}"/>
    				<TextBox x:Name="PART_EditableTextBox" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" IsReadOnly="{Binding IsReadOnly, RelativeSource={RelativeSource TemplatedParent}}" Margin="{TemplateBinding Padding}" Style="{StaticResource ComboBoxEditableTextBox}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
    				<ToggleButton Grid.Column="1" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ComboBoxToggleButton}"/>
    			</Grid>
    			<ControlTemplate.Triggers>
    				<Trigger Property="IsKeyboardFocusWithin" Value="true">
    					<Setter Property="Foreground" Value="Black"/>
    				</Trigger>
    				<Trigger Property="IsDropDownOpen" Value="true">
    					<Setter Property="RenderFocused" TargetName="Border" Value="true"/>
    				</Trigger>
    				<Trigger Property="HasItems" Value="false">
    					<Setter Property="Height" TargetName="DropDownBorder" Value="95"/>
    				</Trigger>
    				<Trigger Property="IsEnabled" Value="false">
    					<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
    					<Setter Property="Background" Value="#FFF4F4F4"/>
    				</Trigger>
    				<Trigger Property="IsGrouping" Value="true">
    					<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
    				</Trigger>
    				<Trigger Property="HasDropShadow" SourceName="PART_Popup" Value="true">
    					<Setter Property="Margin" TargetName="Shdw" Value="0,0,5,5"/>
    					<Setter Property="Color" TargetName="Shdw" Value="#71000000"/>
    				</Trigger>
    				<Trigger Property="ScrollViewer.CanContentScroll" SourceName="DropDownScrollViewer" Value="false">
    					<Setter Property="Canvas.Top" TargetName="OpaqueRect" Value="{Binding VerticalOffset, ElementName=DropDownScrollViewer}"/>
    					<Setter Property="Canvas.Left" TargetName="OpaqueRect" Value="{Binding HorizontalOffset, ElementName=DropDownScrollViewer}"/>
    				</Trigger>
    			</ControlTemplate.Triggers>
    		</ControlTemplate>
    		<Style x:Key="ComboBoxStyle1" TargetType="{x:Type ComboBox}">
    			<Setter Property="FocusVisualStyle" Value="{StaticResource ComboBoxFocusVisual}"/>
    			<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>
    			<Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/>
    			<Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}"/>
    			<Setter Property="BorderThickness" Value="1"/>
    			<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
    			<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
    			<Setter Property="Padding" Value="4,3"/>
    			<Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
    			<Setter Property="ScrollViewer.PanningMode" Value="Both"/>
    			<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
    			<Setter Property="Template">
    				<Setter.Value>
    					<ControlTemplate TargetType="{x:Type ComboBox}">
    						<Grid x:Name="MainGrid" SnapsToDevicePixels="true">
    							<Grid.ColumnDefinitions>
    								<ColumnDefinition Width="*"/>
    								<ColumnDefinition MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" Width="0"/>
    							</Grid.ColumnDefinitions>
    							<Popup x:Name="PART_Popup" AllowsTransparency="true" Grid.ColumnSpan="2" IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" Margin="1" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" Placement="Bottom">
    								<Microsoft_Windows_Themes:SystemDropShadowChrome x:Name="Shdw" Color="Transparent" MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{Binding ActualWidth, ElementName=MainGrid}">
    									<Border x:Name="DropDownBorder" BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}" BorderThickness="1" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}">
    										<ScrollViewer x:Name="DropDownScrollViewer">
    											<Grid RenderOptions.ClearTypeHint="Enabled">
    												<Canvas HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0">
    													<Rectangle x:Name="OpaqueRect" Fill="{Binding Background, ElementName=DropDownBorder}" Height="{Binding ActualHeight, ElementName=DropDownBorder}" Width="{Binding ActualWidth, ElementName=DropDownBorder}"/>
    												</Canvas>
    												<ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    											</Grid>
    										</ScrollViewer>
    									</Border>
    								</Microsoft_Windows_Themes:SystemDropShadowChrome>
    							</Popup>
    							<ToggleButton BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" Grid.ColumnSpan="2" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ComboBoxReadonlyToggleButton}"/>
    							<ContentPresenter ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Content="{TemplateBinding SelectionBoxItem}" ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" IsHitTestVisible="false" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
    							
    							<TextBlock TextWrapping="Wrap" Text="No Items Available" VerticalAlignment="Bottom" Margin="3,0,22,3" Foreground="#FF8B8B8B" FontStyle="Italic">
    								<i:Interaction.Triggers>
    									<ei:DataTrigger Binding="{Binding Items.Count, ElementName=myComboBox, Mode=OneWay}" Value="0">
    										<ei:ChangePropertyAction PropertyName="Visibility">
    											<ei:ChangePropertyAction.Value>
    												<Visibility>Visible</Visibility>
    											</ei:ChangePropertyAction.Value>
    										</ei:ChangePropertyAction>
    									</ei:DataTrigger>
    									<ei:DataTrigger Binding="{Binding Items.Count, ElementName=myComboBox, Mode=OneWay}" Value="0" Comparison="GreaterThan">
    										<ei:ChangePropertyAction PropertyName="Visibility">
    											<ei:ChangePropertyAction.Value>
    												<Visibility>Collapsed</Visibility>
    											</ei:ChangePropertyAction.Value>
    										</ei:ChangePropertyAction>
    									</ei:DataTrigger>
    								</i:Interaction.Triggers>
    							</TextBlock>
    							
    						</Grid>
    						<ControlTemplate.Triggers>
    							<Trigger Property="HasDropShadow" SourceName="PART_Popup" Value="true">
    								<Setter Property="Margin" TargetName="Shdw" Value="0,0,5,5"/>
    								<Setter Property="Color" TargetName="Shdw" Value="#71000000"/>
    							</Trigger>
    							<Trigger Property="HasItems" Value="false">
    								<Setter Property="Height" TargetName="DropDownBorder" Value="95"/>
    							</Trigger>
    							<Trigger Property="IsEnabled" Value="false">
    								<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
    								<Setter Property="Background" Value="#FFF4F4F4"/>
    							</Trigger>
    							<Trigger Property="IsGrouping" Value="true">
    								<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
    							</Trigger>
    							<Trigger Property="ScrollViewer.CanContentScroll" SourceName="DropDownScrollViewer" Value="false">
    								<Setter Property="Canvas.Top" TargetName="OpaqueRect" Value="{Binding VerticalOffset, ElementName=DropDownScrollViewer}"/>
    								<Setter Property="Canvas.Left" TargetName="OpaqueRect" Value="{Binding HorizontalOffset, ElementName=DropDownScrollViewer}"/>
    							</Trigger>
    						</ControlTemplate.Triggers>
    					</ControlTemplate>
    				</Setter.Value>
    			</Setter>
    			<Style.Triggers>
    				<Trigger Property="IsEditable" Value="true">
    					<Setter Property="BorderBrush" Value="{StaticResource TextBoxBorder}"/>
    					<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
    					<Setter Property="IsTabStop" Value="false"/>
    					<Setter Property="Padding" Value="3"/>
    					<Setter Property="Template" Value="{StaticResource ComboBoxEditableTemplate}"/>
    				</Trigger>
    			</Style.Triggers>
    		</Style>
    	</Window.Resources>
    
    	<Grid x:Name="LayoutRoot">
    		<Grid HorizontalAlignment="Left" Height="47.92" Margin="8,8,0,0" VerticalAlignment="Top" Width="154">
    			<Button x:Name="btn1" Content="Add 4 Items" Width="75" HorizontalAlignment="Left" VerticalAlignment="Top" Click="btnClick" Tag="4"/>
    			<Button x:Name="btn2" Content="Add 0 Items" Width="75" HorizontalAlignment="Right" VerticalAlignment="Top" Click="btnClick" Tag="0"/>
    			<ComboBox x:Name="myComboBox" VerticalAlignment="Bottom" Margin="0" Style="{DynamicResource ComboBoxStyle1}"/>
    		</Grid>
    	</Grid>
    </Window>

    Edit: Cleaned up the xaml a bit.


    Friday, March 23, 2012 7:44 PM
  • Christine, thank you for your detailed help.  Right now, I'm putting the PropertyActions under the ContentPresenter as you described, in my ComboBox's style--which is defaulted (thus, no x:Key).  I understand that ElementName=myComboBox should specify the name of my combo, but I'll be using this on a variet of combo boxes, and without a style key.. how do I tell it to bind to the combobox regardless of the lack of key?

    Thank you!


    Purkiss

    Monday, March 26, 2012 8:15 PM
  • Hey Purkiss.

    I am sorry for taking so long to get back to you.  I was in the bed sick yesterday.

    Let's try this and see if it will work...

    The property we need to use is "HasContent".  So I added a textBlock to the template named TextBlock1.

    Then I added the following to the ControlTemplate.Triggers

    <Trigger Property="HasItems" Value="false">
    	<Setter Property="Visibility" TargetName="TextBlock1" Value="Visible"/>
    </Trigger>
    <Trigger Property="HasItems" Value="true">
    	<Setter Property="Visibility" TargetName="TextBlock1" Value="Collapsed"/>
    </Trigger>


    Here is my full xaml for the comboBox control template...

    <Style x:Key="ComboBoxStyle1" TargetType="{x:Type ComboBox}">
    			<Setter Property="FocusVisualStyle" Value="{StaticResource ComboBoxFocusVisual}"/>
    			<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>
    			<Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/>
    			<Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}"/>
    			<Setter Property="BorderThickness" Value="1"/>
    			<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
    			<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
    			<Setter Property="Padding" Value="4,3"/>
    			<Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
    			<Setter Property="ScrollViewer.PanningMode" Value="Both"/>
    			<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
    			<Setter Property="Template">
    				<Setter.Value>
    					<ControlTemplate TargetType="{x:Type ComboBox}">
    						<Grid x:Name="MainGrid" SnapsToDevicePixels="true">
    							<Grid.ColumnDefinitions>
    								<ColumnDefinition Width="*"/>
    								<ColumnDefinition MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" Width="0"/>
    							</Grid.ColumnDefinitions>
    							<Popup x:Name="PART_Popup" AllowsTransparency="true" Grid.ColumnSpan="2" IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" Margin="1" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" Placement="Bottom">
    								<Microsoft_Windows_Themes:SystemDropShadowChrome x:Name="Shdw" Color="Transparent" MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{Binding ActualWidth, ElementName=MainGrid}">
    									<Border x:Name="DropDownBorder" BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}" BorderThickness="1" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}">
    										<ScrollViewer x:Name="DropDownScrollViewer">
    											<Grid RenderOptions.ClearTypeHint="Enabled">
    												<Canvas HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0">
    													<Rectangle x:Name="OpaqueRect" Fill="{Binding Background, ElementName=DropDownBorder}" Height="{Binding ActualHeight, ElementName=DropDownBorder}" Width="{Binding ActualWidth, ElementName=DropDownBorder}"/>
    												</Canvas>
    												<ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    											</Grid>
    										</ScrollViewer>
    									</Border>
    								</Microsoft_Windows_Themes:SystemDropShadowChrome>
    							</Popup>
    							<ToggleButton BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" Grid.ColumnSpan="2" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ComboBoxReadonlyToggleButton}"/>
    							<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Content="{TemplateBinding SelectionBoxItem}" ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" IsHitTestVisible="false" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
    							<TextBlock x:Name="TextBlock1" HorizontalAlignment="Center" Margin="0" TextWrapping="Wrap" Text="No Items Available" d:LayoutOverrides="Height" FontStyle="Italic" Foreground="Gray" VerticalAlignment="Center" Visibility="Visible"/>
    						</Grid>
    						<ControlTemplate.Triggers>
    							<Trigger Property="HasDropShadow" SourceName="PART_Popup" Value="true">
    								<Setter Property="Margin" TargetName="Shdw" Value="0,0,5,5"/>
    								<Setter Property="Color" TargetName="Shdw" Value="#71000000"/>
    							</Trigger>
    							<Trigger Property="HasItems" Value="false">
    								<Setter Property="Height" TargetName="DropDownBorder" Value="95"/>
    							</Trigger>
    							<Trigger Property="HasItems" Value="false">
    								<Setter Property="Visibility" TargetName="TextBlock1" Value="Visible"/>
    							</Trigger>
    							<Trigger Property="HasItems" Value="true">
    								<Setter Property="Visibility" TargetName="TextBlock1" Value="Collapsed"/>
    							</Trigger>
    							<Trigger Property="IsEnabled" Value="false">
    								<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
    								<Setter Property="Background" Value="#FFF4F4F4"/>
    							</Trigger>
    							<Trigger Property="IsGrouping" Value="true">
    								<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
    							</Trigger>
    							<Trigger Property="ScrollViewer.CanContentScroll" SourceName="DropDownScrollViewer" Value="false">
    								<Setter Property="Canvas.Top" TargetName="OpaqueRect" Value="{Binding VerticalOffset, ElementName=DropDownScrollViewer}"/>
    								<Setter Property="Canvas.Left" TargetName="OpaqueRect" Value="{Binding HorizontalOffset, ElementName=DropDownScrollViewer}"/>
    							</Trigger>
    						</ControlTemplate.Triggers>
    					</ControlTemplate>
    				</Setter.Value>
    			</Setter>
    			<Style.Triggers>
    				<Trigger Property="IsEditable" Value="true">
    					<Setter Property="BorderBrush" Value="{StaticResource TextBoxBorder}"/>
    					<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
    					<Setter Property="IsTabStop" Value="false"/>
    					<Setter Property="Padding" Value="3"/>
    					<Setter Property="Template" Value="{StaticResource ComboBoxEditableTemplate}"/>
    				</Trigger>
    			</Style.Triggers>
    		</Style>

    Hope that helps.

    ~Christine


    Tuesday, March 27, 2012 3:51 PM