ComboBox ControlTemplate Drop Down Button

后端 未结 1 1168
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-15 02:21

I was wondering if anyone had an example of how to style/template a combobox to only show a button at its default initial state. Kind of like the DropDownButton gallery for

相关标签:
1条回答
  • 2021-01-15 03:09

    Here's some sample code:
    Note that the ContentPresenter and PART_EditableTextBox have been commented out deliberately and they can be taken off from the template.
    Also, you may want to customize the appearance of togglebutton and the popup.

    <Window x:Class="HiddenTextComboBox.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window1" Height="300" Width="300">
        <Window.Resources>
            <ControlTemplate x:Key="HiddenTextComboBox" TargetType="{x:Type ComboBox}">
                <Grid>
                    <ToggleButton x:Name="DropDownToggle"
                      HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  
                      Margin="-1" HorizontalContentAlignment="Right"
                      IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,
                                  RelativeSource={RelativeSource TemplatedParent}}">
                        <Path x:Name="BtnArrow" Height="4" Width="8" 
                        Stretch="Uniform" Margin="0,0,4,0"  Fill="Black"
                        Data="F1 M 300,-190L 310,-190L 305,-183L 301,-190 Z " />
                    </ToggleButton>
                    <!--<ContentPresenter x:Name="ContentPresenter" Margin="6,2,25,2"
                      Content="{TemplateBinding SelectionBoxItem}"
                      ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
                      ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}">
                    </ContentPresenter>
                    <TextBox x:Name="PART_EditableTextBox"
                      Style="{x:Null}"
                      Focusable="False"
                      Background="{TemplateBinding Background}"
                      HorizontalAlignment="Left" 
                      VerticalAlignment="Center" 
                      Margin="3,3,23,3"
                      Visibility="Hidden"
                      IsReadOnly="{TemplateBinding IsReadOnly}"/>-->
                    <Popup x:Name="PART_Popup"
                      IsOpen="{TemplateBinding IsDropDownOpen}">
                        <Border x:Name="PopupBorder" 
                        HorizontalAlignment="Stretch" Height="Auto" 
                        MinWidth="{TemplateBinding ActualWidth}"
                        MaxHeight="{TemplateBinding MaxDropDownHeight}"
                        BorderThickness="{TemplateBinding BorderThickness}" 
                        BorderBrush="Black" Background="White" CornerRadius="3">
                            <ScrollViewer x:Name="ScrollViewer" BorderThickness="0" Padding="1">
                                <ItemsPresenter/>
                            </ScrollViewer>
                        </Border>
                    </Popup>
                </Grid>
            </ControlTemplate>
        </Window.Resources>
        <Grid>
                <ComboBox Height="23" Width="23" Template="{StaticResource HiddenTextComboBox}">
                    <ComboBoxItem>First</ComboBoxItem>
                    <ComboBoxItem>Second</ComboBoxItem>
                    <ComboBoxItem>Third</ComboBoxItem>
                </ComboBox>
        </Grid>
    </Window>
    

    Code adapted from: Customizing the Appearance of an Existing Control by Creating a ControlTemplate

    0 讨论(0)
自定义标题
段落格式
字体
字号
代码语言
提交回复
热议问题