如何在WPF中自定义ComboBox

时间:2011-02-04 06:09:36

标签: wpf combobox styling

总是在ComboBox中显示一个箭头按钮,用户单击该按钮,然后弹出一个带有值的列表。在WPF中,我们可以更改箭头按钮,我将使用自己的箭头mage.functionality将是相同的。如果可能的话请告诉我xaml。感谢

1 个答案:

答案 0 :(得分:2)

我的理解是你要自定义组合框的箭头并拥有自定义箭头图像。如果是这种情况,那么你可以通过修改组合框的控制模板轻松完成。

您可以使用Expression Blend编辑默认控件模板,也可以从here复制默认控件模板并进行修改。

箭头在默认模板中表示为togglebutton controltemplate Named中的路径  的 '箭头'

。您可以根据自己的需要进行更改

<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" SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}">
                        <Grid HorizontalAlignment="Right" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}">
                            <Path x:Name="Arrow" Fill="Red" HorizontalAlignment="Center" Margin="3,1,0,0" VerticalAlignment="Center" Data="{StaticResource DownArrowGeometry}"/>
                       </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>