我有一个样式的多列ComboBox,即使组合框中有很多项目,也没有显示滚动条。 当有几件物品时它会正常工作。 但问题是,只要项目超过可视区域,就没有滚动条来滚动内容。
资源词典:
<!--+++++++++++++++combo1+++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<!--header text-->
<TextBlock x:Key="header1" Text="LastName"></TextBlock>
<TextBlock x:Key="header2" Text="Name"></TextBlock>
<TextBlock x:Key="header3" Text="ID"></TextBlock>
<!--Toggle Button Template-->
<ControlTemplate x:Key="ComboBoxToggleButton" TargetType="ToggleButton">
<Grid x:Name="gd">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="30" />
</Grid.ColumnDefinitions>
<Border x:Name="Border" SnapsToDevicePixels="True" Grid.ColumnSpan="2" Background="White" BorderBrush="LightGray" BorderThickness="1"/>
<Border x:Name="Boredr1" SnapsToDevicePixels="True" Grid.Column="0" Margin="1" Background="White" BorderBrush="LightGray" BorderThickness="0,0,1,0" />
<Path x:Name="Arrow" SnapsToDevicePixels="True" Grid.Column="1" Fill="Black" HorizontalAlignment="Center" VerticalAlignment="Center" Data="M 0 0 L 6 6 L 12 0 Z"/>
<ContentPresenter Grid.Column="0" TextElement.Foreground="Orange"></ContentPresenter>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="ToggleButton.IsMouseOver" Value="True">
<Setter TargetName="Border" Property="BorderBrush" Value="Black"/>
<Setter TargetName="Boredr1" Property="BorderBrush" Value="Black"/>
</Trigger>
<Trigger Property="ToggleButton.IsChecked" Value="True">
<Setter TargetName="Arrow" Property="Data" Value="M 0 0 L 5 5 L 10 0"/>
<Setter TargetName="Arrow" Property="Fill" Value="White"/>
<Setter TargetName="Arrow" Property="Stroke" Value="Black"/>
<Setter TargetName="Arrow" Property="StrokeThickness" Value="1.5"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="gd" Property="Visibility" Value="Visible"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<!--TextBox Template-->
<ControlTemplate x:Key="ComboBoxTextBox" TargetType="TextBox">
<ScrollViewer x:Name="PART_ContentHost" Focusable="False" />
</ControlTemplate>
<!--2 column combobox-->
<Style x:Key="2_Column_Cmb" TargetType="ComboBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBox">
<Grid>
<ToggleButton Name="ToggleButton" Foreground="Black" Template="{StaticResource ComboBoxToggleButton}" Focusable="false" IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}" ClickMode="Press">
</ToggleButton>
<ContentPresenter Name="ContentSite" IsHitTestVisible="False" Content="{TemplateBinding SelectionBoxItem}" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Margin="3,3,23,3" VerticalAlignment="Center" HorizontalAlignment="Left" />
<TextBox OverridesDefaultStyle="True" SelectionBrush="Gray" CaretBrush="Black" Margin="0,0,30,0" TextWrapping="NoWrap"
x:Name="PART_EditableTextBox" FontFamily="B Koodak" Foreground="Black"
Style="{x:Null}" Template="{StaticResource ComboBoxTextBox}" HorizontalAlignment="Left" Focusable="True"
VerticalAlignment="Center" FontSize="15" Visibility="Hidden" IsReadOnly="{TemplateBinding IsReadOnly}"/>
<Popup Name="Popup" Grid.ColumnSpan="2" Placement="Bottom" IsOpen="{TemplateBinding IsDropDownOpen}" AllowsTransparency="True" Focusable="False" PopupAnimation="Slide">
<Grid Name="DropDown" SnapsToDevicePixels="True" MaxWidth="{TemplateBinding ActualWidth}" MinWidth="{TemplateBinding ActualWidth}" MaxHeight="{TemplateBinding MaxDropDownHeight}">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid Background="LightGray" Grid.Row="0" Grid.Column="0">
<TextBlock Text="{Binding Source={StaticResource header2},Path=Text}"
HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Black"
FontFamily="B Titr" FontSize="13" ></TextBlock>
</Grid>
<Grid Background="LightGray" Grid.Row="0" Grid.Column="1">
<TextBlock Text="{Binding Source={StaticResource header3},Path=Text}" Background="LightGray"
HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Black"
FontFamily="B Titr" FontSize="13"></TextBlock>
</Grid>
<Border Grid.ColumnSpan="2" Grid.RowSpan="2" x:Name="DropDownBorder" SnapsToDevicePixels="True" Background="Transparent" MaxWidth="{TemplateBinding ActualWidth}" BorderThickness="1" BorderBrush="LightGray"/>
<ScrollViewer Grid.ColumnSpan="2" ScrollViewer.CanContentScroll="False" Grid.Row="1" SnapsToDevicePixels="True">
<StackPanel IsItemsHost="True" Background="Transparent">
</StackPanel>
</ScrollViewer>
</Grid>
</Popup>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsEditable" Value="true">
<Setter Property="IsTabStop" Value="false"/>
<Setter TargetName="PART_EditableTextBox" Property="Background" Value="White"/>
<Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible"/>
<Setter TargetName="PART_EditableTextBox" Property="Foreground" Value="Black"/>
<Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/>
</Trigger>
<Trigger Property="HasItems" Value="false">
<Setter TargetName="DropDownBorder" Property="MinHeight" Value="95"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="IsTabStop" Value="false"/>
<Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible"/>
<Setter TargetName="PART_EditableTextBox" Property="Foreground" Value="Black"/>
<Setter TargetName="PART_EditableTextBox" Property="IsEnabled" Value="False"/>
<Setter TargetName="PART_EditableTextBox" Property="Background" Value="White"/>
<Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/>
</Trigger>
<Trigger Property="IsGrouping" Value="true">
<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
</Trigger>
<Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="true">
<Setter TargetName="DropDownBorder" Property="Margin" Value="0,2,0,0"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
</Style.Triggers>
</Style>
<!--3 column combobox-->
<Style x:Key="3_Column_Cmb" TargetType="ComboBox">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.CanContentScroll" Value="true" />
<Setter Property="Height" Value="40"/>
<Setter Property="MinWidth" Value="120"/>
<Setter Property="MinHeight" Value="20"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBox">
<Grid>
<ToggleButton Name="ToggleButton"
Foreground="Black"
Template="{StaticResource ComboBoxToggleButton}" Focusable="false"
IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}"
ClickMode="Press">
</ToggleButton>
<ContentPresenter Name="ContentSite"
IsHitTestVisible="False"
Content="{TemplateBinding SelectionBoxItem}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Margin="3,3,23,3"
VerticalAlignment="Center" HorizontalAlignment="Left" />
<TextBox x:Name="PART_EditableTextBox" OverridesDefaultStyle="True"
SelectionBrush="Gray" CaretBrush="Black" Margin="0,0,30,0" TextWrapping="NoWrap"
FontFamily="B Koodak" Foreground="Black"
Style="{x:Null}" Template="{StaticResource ComboBoxTextBox}" HorizontalAlignment="Left"
Focusable="True" VerticalAlignment="Center" FontSize="15" Visibility="Hidden" IsReadOnly="{TemplateBinding IsReadOnly}"/>
<Popup Name="Popup" Grid.ColumnSpan="2" Placement="Bottom"
IsOpen="{TemplateBinding IsDropDownOpen}" AllowsTransparency="True" Focusable="False" PopupAnimation="Fade">
<ContentControl Name="DropDown"
SnapsToDevicePixels="True"
MaxWidth="{TemplateBinding ActualWidth}" MinWidth="{TemplateBinding ActualWidth}"
MaxHeight="{TemplateBinding MaxDropDownHeight}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid Background="LightGray" Grid.Row="0" Grid.Column="0">
<TextBlock Text="{Binding Source={StaticResource header1}, Path=Text}"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Foreground="Black" FontFamily="B Titr" FontSize="13" >
</TextBlock>
</Grid>
<Grid Background="LightGray" Grid.Row="0" Grid.Column="1">
<TextBlock Text="{Binding Source={StaticResource header2}, Path=Text}"
Background="LightGray"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Foreground="Black" FontFamily="B Titr" FontSize="13"></TextBlock>
</Grid>
<Grid Background="LightGray" Grid.Row="0" Grid.Column="2">
<TextBlock Text="{Binding Source={StaticResource header3}, Path=Text}"
Background="LightGray"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Foreground="Black" FontFamily="B Titr" FontSize="13"></TextBlock>
</Grid>
<Border x:Name="DropDownBorder" Grid.ColumnSpan="3" Grid.RowSpan="2"
SnapsToDevicePixels="True" Background="Transparent"
MaxWidth="{TemplateBinding ActualWidth}" BorderThickness="1" BorderBrush="LightGray"/>
<ScrollViewer Grid.ColumnSpan="3" ScrollViewer.CanContentScroll="False"
Grid.Row="1" Margin="0,0,0,0" SnapsToDevicePixels="True">
<StackPanel IsItemsHost="True" Background="Transparent">
</StackPanel>
</ScrollViewer>
</Grid>
</ContentControl>
</Popup>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsEditable" Value="true">
<Setter Property="IsTabStop" Value="false"/>
<Setter TargetName="PART_EditableTextBox" Property="Background" Value="White"/>
<Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible"/>
<Setter TargetName="PART_EditableTextBox" Property="Foreground" Value="Black"/>
<Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/>
</Trigger>
<Trigger Property="HasItems" Value="false">
<Setter TargetName="DropDownBorder" Property="MinHeight" Value="95"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="IsTabStop" Value="false"/>
<Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible"/>
<Setter TargetName="PART_EditableTextBox" Property="Foreground" Value="Black"/>
<Setter TargetName="PART_EditableTextBox" Property="IsEnabled" Value="False"/>
<Setter TargetName="PART_EditableTextBox" Property="Background" Value="White"/>
<Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/>
</Trigger>
<Trigger Property="IsGrouping" Value="true">
<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
</Trigger>
<Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="true">
<Setter TargetName="DropDownBorder" Property="Margin" Value="0,2,0,0"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
</Style.Triggers>
</Style>
<!--combobox item style-->
<Style x:Key="Column_CmbItem" TargetType="ComboBoxItem">
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBoxItem">
<Grid x:Name="Border" Grid.ColumnSpan="2" Margin="1,0,1,1" Background="White">
<ContentPresenter></ContentPresenter>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="ComboBoxItem.IsSelected" Value="True">
<Setter TargetName="Border" Property="Background" Value="Gray"></Setter>
</Trigger>
<Trigger Property="ComboBoxItem.IsMouseOver" Value="True">
<Setter TargetName="Border" Property="Background" Value="LightBlue"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!--++++++++END OF combo1+++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
的Xaml:
<ComboBox Margin="24,39,26,0" Name="comboBox2" FlowDirection="RightToLeft"
IsEditable="True"
IsTextSearchEnabled="True"
ScrollViewer.VerticalScrollBarVisibility="Visible"
ScrollViewer.CanContentScroll="True"
ScrollViewer.PanningMode="VerticalFirst"
ScrollViewer.IsDeferredScrollingEnabled="True"
ItemsSource="{Binding}"
Style="{StaticResource 3_Column_Cmb}"
ItemContainerStyle="{StaticResource Column_CmbItem}" Tag="Item1" Width="321" Height="30" VerticalAlignment="Top">
<TextSearch.TextPath>LastName</TextSearch.TextPath>
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid Background="Transparent" SnapsToDevicePixels="True">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding LastName}"
HorizontalAlignment="Center" VerticalAlignment="Center"
Grid.Column="0"
FontSize="15" TextTrimming="CharacterEllipsis" Foreground="Black" />
<TextBlock Text="{Binding Name}"
HorizontalAlignment="Center" VerticalAlignment="Center"
Grid.Column="1"
FontSize="15" TextTrimming="CharacterEllipsis" Foreground="Black" />
<TextBlock Text="{Binding Code}"
VerticalAlignment="Center" HorizontalAlignment="Center"
Grid.Column="2"
FontSize="20" Foreground="Black"/>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
C#:
List<Combo3Col> Combo3ColItems = new List<Combo3Col>();
for (int i=0; i < 30; i++)
{
Combo3ColItems.Add(new Combo3Col { LastName = "TestLastName", Name = "TestName", Code = "1354501" });
}
foreach (Combo3Col item in Combo3ColItems)
{
comboBox2.Items.Add(item);
}
class Combo3Col
{
private string lastname;
public string LastName
{
get { return lastname; }
set { lastname = value; }
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private string code;
public string Code
{
get { return code; }
set { code = value; }
}
}
是的,有人可以帮帮我吗?
最好的问候
答案 0 :(得分:0)
问题是你的第二排网格样式3_Column_Cmb设置为自动
<RowDefinition Height="Auto"></RowDefinition>
出于某种原因,ScrollViewer认为它具有无限空间并且不显示滚动条。解决方法是消除两行并通过边距定位ScrollView(我从顶部选择30):
<Style x:Key="3_Column_Cmb" TargetType="ComboBox">
<Setter Property="SnapsToDevicePixels" Value="true" />
<Setter Property="OverridesDefaultStyle" Value="true" />
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
<Setter Property="ScrollViewer.CanContentScroll" Value="true" />
<Setter Property="Height" Value="40" />
<Setter Property="MinWidth" Value="120" />
<Setter Property="MinHeight" Value="20" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBox">
<Grid>
<ToggleButton Name="ToggleButton"
ClickMode="Press"
Focusable="false"
Foreground="Black"
IsChecked="{Binding Path=IsDropDownOpen,
Mode=TwoWay,
RelativeSource={RelativeSource TemplatedParent}}"
Template="{StaticResource ComboBoxToggleButton}" />
<ContentPresenter Name="ContentSite"
Margin="3,3,23,3"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Content="{TemplateBinding SelectionBoxItem}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
IsHitTestVisible="False" />
<TextBox x:Name="PART_EditableTextBox"
Margin="0,0,30,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
CaretBrush="Black"
Focusable="True"
FontFamily="B Koodak"
FontSize="15"
Foreground="Black"
IsReadOnly="{TemplateBinding IsReadOnly}"
OverridesDefaultStyle="True"
SelectionBrush="Gray"
Style="{x:Null}"
Template="{StaticResource ComboBoxTextBox}"
TextWrapping="NoWrap"
Visibility="Hidden" />
<Popup Name="Popup"
Grid.ColumnSpan="2"
AllowsTransparency="True"
Focusable="False"
IsOpen="{TemplateBinding IsDropDownOpen}"
Placement="Bottom"
PopupAnimation="Fade">
<Grid MinWidth="{TemplateBinding ActualWidth}"
MaxWidth="{TemplateBinding ActualWidth}"
MaxHeight="{TemplateBinding MaxDropDownHeight}"
SnapsToDevicePixels="True">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
</Grid.RowDefinitions>
<Grid Grid.Row="0"
Grid.Column="0"
Background="LightGray">
<TextBlock HorizontalAlignment="Center"
VerticalAlignment="Top"
FontFamily="B Titr"
FontSize="13"
Foreground="Black"
Text="h1" />
</Grid>
<Border x:Name="DropDownBorder"
Grid.RowSpan="2"
Grid.ColumnSpan="3"
MaxWidth="{TemplateBinding ActualWidth}"
Background="Transparent"
BorderBrush="LightGray"
BorderThickness="1"
SnapsToDevicePixels="True" />
<Grid Grid.Row="0"
Grid.Column="1"
Background="LightGray">
<TextBlock HorizontalAlignment="Center"
VerticalAlignment="Top"
Background="LightGray"
FontFamily="B Titr"
FontSize="13"
Foreground="Black"
Text="h2" />
</Grid>
<Grid Grid.Row="0"
Grid.Column="2"
Background="LightGray">
<TextBlock HorizontalAlignment="Center"
VerticalAlignment="Top"
Background="LightGray"
FontFamily="B Titr"
FontSize="13"
Foreground="Black"
Text="h3" />
</Grid>
<ScrollViewer Grid.ColumnSpan="3"
Margin="0,30,0,0"
ScrollViewer.CanContentScroll="False"
SnapsToDevicePixels="True">
<StackPanel Background="Transparent" IsItemsHost="True" />
</ScrollViewer>
</Grid>
</Popup>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsEditable" Value="true">
<Setter Property="IsTabStop" Value="false" />
<Setter TargetName="PART_EditableTextBox" Property="Background" Value="White" />
<Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible" />
<Setter TargetName="PART_EditableTextBox" Property="Foreground" Value="Black" />
<Setter TargetName="ContentSite" Property="Visibility" Value="Hidden" />
</Trigger>
<Trigger Property="HasItems" Value="false">
<!--<Setter TargetName="DropDownBorder" Property="MinHeight" Value="95" />-->
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="IsTabStop" Value="false" />
<Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible" />
<Setter TargetName="PART_EditableTextBox" Property="Foreground" Value="Black" />
<Setter TargetName="PART_EditableTextBox" Property="IsEnabled" Value="False" />
<Setter TargetName="PART_EditableTextBox" Property="Background" Value="White" />
<Setter TargetName="ContentSite" Property="Visibility" Value="Hidden" />
</Trigger>
<Trigger Property="IsGrouping" Value="true">
<Setter Property="ScrollViewer.CanContentScroll" Value="false" />
</Trigger>
<Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="true">
<!--<Setter TargetName="DropDownBorder" Property="Margin" Value="0,2,0,0" />-->
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers />
</Style>