回答
你在說可編輯的ComboBox嗎?在普通組合框中,「按鈕」是(未展開的)組合框的整個大小。所以,我覺得你說的肯定是一個可編輯的ComboBox其中按鈕是右對齊一個文本框佔用空間的其餘部分。
這聽起來像你想要的按鈕的寬度成正比,而不是僅僅佔用,它必須採取的空間。
如果我是正確的在這方面,那麼你要編輯的ControlTemplate
,通過以下羅素Troywest的建議。特別是,我想你會想改變Placement 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>
這是ControlTemplate
組合框的可編輯狀態。關鍵部分是頂部的Placement網格的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
對象,以便在您選擇時更改小箭頭的大小。
我敢肯定,你將不得不改變組合框這也改變所有列表項
我想你會需要惹控制模板的字體大小。這question正在做類似的事情,所以答案可能會推動你在正確的方向。
您是否希望整個組合框變得更大,包括文字和下拉按鈕以及下拉箭頭?這可能是有用的,例如用於自助服務終端或觸摸屏。
如果是這樣,那麼你可以使用一個縮放變換 - 只需使整個組合框出現在其原始大小的200%,或300%,或任何其他。 WPF是矢量圖,因此可以很好地擴展。
爲此,您可以使用ScaleTransform作爲LayoutTransform。這將擴展您的組合框高達3倍正常大小:
<ComboBox ItemsSource="...">
<ComboBox.LayoutTransform>
<ScaleTransform ScaleX="3" ScaleY="3"/>
</ComboBox.LayoutTransform>
</ComboBox>
這將是這樣的(之前和應用ScaleTransform後):
您也可以看看到Viewbox,如果你的目標是採取一些控制和伸展他們來填滿整個屏幕。它與ScaleTransform實際上是一樣的,但不是對縮放級別進行硬編碼,而是讓Viewbox自動縮放您的內容以填充它的父級。
- 1. 運行時更改大小按鈕(wpf)
- 2. 使用按鈕更改綁定的WPF組合框SelectedItem
- 3. 更改大小的按鈕
- 4. Excel的VBA組合框下拉按鈕大小 - 改變自身
- 5. WPF在組合框中添加按鈕
- 6. 更改QWizard按鈕大小
- 7. 更改按鈕大小
- 8. UINavigationBar按鈕更改大小?
- 9. 更改按鈕大小(XAML)
- 10. WPF組合框箭頭按鈕
- 11. 如何在複選框中更改按鈕的大小
- 12. 如何更改對話框中的按鈕大小jQuery
- 13. 用vb.net中的窗口大小更改按鈕的大小
- 14. 用vb.net中的窗口大小更改按鈕的大小
- 15. 如何更改組合框WPF的CornerRadius
- 16. WPF DataTrigger的組合框項目更改
- 17. 更改數據的組合框在WPF
- 18. 更改複選框大小WPF
- 19. 更改按鈕上的字體大小
- 20. 無法更改按鈕的大小
- 21. 更改單選按鈕的大小
- 22. 如何更改按鈕的大小
- 23. UIView動畫更改大小的按鈕
- 24. 更改Facebook的大小Like按鈕
- 25. 更改操作表的按鈕大小?
- 26. 如何更改xcode的按鈕大小?
- 27. 如何更改組合框控件中的下拉按鈕?
- 28. 如何更改字體大小,而不更改CSS中按鈕的大小
- 29. C#的變化組合框按鈕大小和圖像
- 30. WPF組合框BorderBrush不會更改
謝謝蒂姆。看起來像第三段中的解決方案可以幫助我。你能不能給我更多的信息。其實,我需要按鈕的大小增加一點。我相信當我增加按鈕的列大小時,它也會影響按鈕的大小。 – logeeks 2011-05-15 16:59:46
我增加了更多信息,但並不確定你正在尋找什麼。隨意留下另一條評論,如果我沒有涵蓋你想要的內容,我可以添加更多信息。 – Tim 2011-05-16 14:45:03