有没有办法增加组合框内按钮[有向下箭头符号]的大小?我增加了组合框的高度和宽度,但箭头按钮与整体尺寸不相符。
提前致谢, 约翰。
答案 0 :(得分:3)
您在谈论可编辑的ComboBox吗?在普通的ComboBox中,“按钮”是(未展开的)ComboBox的整个大小。所以我认为你必须要谈论一个可编辑的ComboBox,其中按钮右对齐,文本框占据了剩下的空间。
听起来你希望按钮的宽度成比例,而不是占用它必须占用的空间。
如果我在这方面是正确的,那么您将要编辑ControlTemplate
,如下面的Russell Troywest所建议的那样。特别是,我认为您将要更改放置Grid
定义列定义的方式。对于包含文本框的列,它们当前定义为*
,对于包含按钮的列,它们定义为Auto
。您可能希望分别将这些更改为3*
和*
(这会使文本框始终为宽度的75%,按钮始终为宽度的25%)。
当你在那里时,你可能还想改变绘制小下拉箭头的方式(它只是一个Path
对象),因为当你'时,它可能有点奇怪。我的按钮本身很大。
修改强>
我正在添加更多信息,但我不确定你在寻找什么。
当您编辑ComboBox
的模板时(我建议使用Blend,可以非常轻松地将这些东西拉出来 - 只需右键单击它,选择编辑模板,然后编辑复制和混合将拉出所有默认样式/模板供你编辑),你会在那里找到这段代码:
<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>
这是ComboBox的可编辑状态的ControlTemplate
。要查看的关键部分是顶部放置网格的ColumnDefinitions
。它们目前定义为:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
这意味着ToggleButton
(在第二列中)只获得它需要的任何空间,TextBox
(在第一列中)获得剩余的空间。给了ComboBox
。
您只想将该部分更改为:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
由于我上面描述的原因(显然你需要确定正确的比例,如果3:1的比例对你不正确)。
您还会看到ToggleButton
有一个Style
ComboBoxToggleButton
,也可以在Blend生成的资源中找到。如果您选择这样做,那将包含您需要编辑的Path
对象以更改小箭头的大小。
答案 1 :(得分:1)
您是否希望整个组合框更大,包括文本和下拉按钮以及下拉箭头?这可能是有用的,例如用于自助服务终端或触摸屏。
如果是这样,那么你可以使用比例变换 - 只需使整个组合框显示为其原始大小的200%,或300%,或其他任何东西。 WPF是矢量,所以它可以很好地扩展。
为此,您可以使用ScaleTransform作为LayoutTransform。这会将您的ComboBox扩展到正常大小的3倍:
<ComboBox ItemsSource="...">
<ComboBox.LayoutTransform>
<ScaleTransform ScaleX="3" ScaleY="3"/>
</ComboBox.LayoutTransform>
</ComboBox>
看起来像这样(在应用ScaleTransform之前和之后):
如果您的目标是采取一些控制并将其拉伸以填满整个屏幕,您也可以查看Viewbox。它实际上与ScaleTransform相同,但是您不必对缩放级别进行硬编码,而是让Viewbox自动缩放您的内容以填充其父级。
答案 2 :(得分:0)
我认为你需要搞乱控制模板。这个question正在做类似的事情,所以答案可能会让你朝着正确的方向前进。
答案 3 :(得分:-4)
我很确定您必须更改组合框的字体大小,这也会更改所有列表项