WPF 组合框样式
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/16627611/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
WPF Combobox Styling
提问by Abbas
Below is my ComboBox style code. Idea is to put a border around the ComboBox and reuse the style.
下面是我的 ComboBox 样式代码。想法是在 ComboBox 周围放置一个边框并重用样式。
<Application x:Class="WpfApplication1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="Window1.xaml">
<Application.Resources>
<Style x:Key="UserInputComboBoxStyle"
TargetType="{x:Type ComboBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBox}">
<Grid>
<Border BorderBrush="Black"
BorderThickness="2"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch" />
<ComboBox HorizontalAlignment="Stretch"
VerticalAlignment="Center"
HorizontalContentAlignment="Left"
VerticalContentAlignment="Center"
Margin="5">
</ComboBox>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Application.Resources>
</Application>
However after applying this style, in the resultant combobox the combobox items are not getting displayed.
但是,在应用此样式后,在结果组合框中不会显示组合框项目。
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ComboBoxTest"
Height="300"
Width="300">
<StackPanel>
<ComboBox Margin="5"
Style="{StaticResource UserInputComboBoxStyle}">
<ComboBoxItem Content="Test0"
IsSelected="True" />
<ComboBoxItem Content="Test1" />
<ComboBoxItem Content="Test2" />
</ComboBox>
</StackPanel>
</Window>
Why are the ComboBox Iitems not displayed?
为什么不显示 ComboBox Iitems?
EDIT:
编辑:
Finally settled for this, still would like to know how this can be done with least number of XAML code.
最终解决了这个问题,仍然想知道如何用最少的 XAML 代码来完成。
<Grid>
<Border BorderBrush="Black"
BorderThickness="2"
CornerRadius="5">
<ComboBox SelectedIndex="0"
VerticalAlignment="Top"
HorizontalAlignment="Stretch"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Center"
BorderBrush="Black"
BorderThickness="5"
Margin="5">
<ComboBoxItem IsSelected="True">Test0</ComboBoxItem>
<ComboBoxItem>Test1</ComboBoxItem>
<ComboBoxItem>Test2</ComboBoxItem>
<ComboBoxItem>Test3</ComboBoxItem>
</ComboBox>
</Border>
</Grid>
回答by dkozl
ComboBox
has few named parts responsible for styling different parts which means certain parts of template must be named properly in order to be used in correct places. I think you want to style ContentPresenterBorder
. Everything has been explained on this MSDNsite.
ComboBox
很少有命名部分负责对不同部分进行样式设置,这意味着模板的某些部分必须正确命名才能在正确的位置使用。我想你想要风格ContentPresenterBorder
。一切都已在此MSDN站点上进行了解释。
MSDN example:
MSDN示例:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBox">
<Grid>
<Border x:Name="ContentPresenterBorder">
<Grid>
<ToggleButton x:Name="DropDownToggle"/>
<ContentPresenter x:Name="ContentPresenter" />
<TextBlock Text=" " />
</ContentPresenter>
</Grid>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>