自定义组合框样式

时间:2014-01-18 13:15:03

标签: c# wpf

所以几天后学习WPF我试图为我的ComboBox制作自定义样式。我想设置内容宽度的边框,以填充边框和下拉按钮之间的所有未使用空间。解决这个问题之后,我将从下拉列表开始,包含项目。

结果:

enter image description here

代码:

<Style TargetType="ComboBox">
   <Setter Property="Foreground" Value="Yellow"/>
   <Setter Property="Template">
      <Setter.Value>
         <ControlTemplate TargetType="{x:Type ComboBox}">
            <DockPanel>
               <Border x:Name="bg" BorderBrush="Yellow" Background="HotPink" BorderThickness="1" CornerRadius="0" DockPanel.Dock="Left">
                  <ContentPresenter
                        Name="ContentSite"
                        IsHitTestVisible="False" 
                        Content="{TemplateBinding SelectionBoxItem}"
                        ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
                        ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
                        Margin="3,3,23,3"
                        VerticalAlignment="Center"
                        HorizontalAlignment="Left"/>
               </Border>
               <Button x:Name="dropBtn" Width="20" DockPanel.Dock="Right" HorizontalAlignment="Right">
                  <Path VerticalAlignment="Center"
                        Width="10"
                        Height="8"
                        Data="M0,0 L0,2 L4,6 L8,2 L8,0 L4,4 z"
                        Stretch="Fill"
                        Fill="HotPink"/>
               </Button>
            </DockPanel>
         </ControlTemplate>
      </Setter.Value>
   </Setter>
</Style>

1 个答案:

答案 0 :(得分:1)

在DockPanel中的边框之前移动按钮,使其成为面板的最后一个子项。

然后在DockPanel上将LastChildFill设置为True

<DockPanel LastChildFill="True">
   <Button x:Name="dropBtn" Width="20" DockPanel.Dock="Right" 
           HorizontalAlignment="Right">
       <Path VerticalAlignment="Center"
             Width="10"
             Height="8"
             Data="M0,0 L0,2 L4,6 L8,2 L8,0 L4,4 z"
             Stretch="Fill"
             Fill="HotPink"/>
   </Button>
   <Border x:Name="bg" BorderBrush="Yellow" Background="HotPink"
           BorderThickness="1" CornerRadius="0" DockPanel.Dock="Left">
      <ContentPresenter
             Name="ContentSite"
             IsHitTestVisible="False" 
             Content="{TemplateBinding SelectionBoxItem}"
             ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
             ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
             Margin="3,3,23,3"
             VerticalAlignment="Center"
             HorizontalAlignment="Left"/>
   </Border>
</DockPanel>

根据LastChildFill的文档:

  

获取或设置一个值,该值指示最后一个子元素   在DockPanel内伸展以填充剩余的可用空间。