2011-04-18 79 views
2

我想知道是否有人有一個如何樣式/模板組合框的例子只顯示一個按鈕在其默認初始狀態。有點像絲帶欄的DropDownButton畫廊。我只希望用戶能夠點擊按鈕並列出組合框項目。選擇後,它不會將選定的項目保存在文本字段中,因爲沒有文本字段只有一個按鈕。謝謝:)ComboBox ControlTemplate下拉按鈕

回答

4

下面是一些示例代碼:
注意,ContentPresenter和PART_EditableTextBox被故意註釋掉,他們可以從模板中取下。
此外,您可能想要自定義togglebutton和彈出窗口的外觀。改編自

<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> 

代碼:Customizing the Appearance of an Existing Control by Creating a ControlTemplate