2017-02-20 6 views
0

У меня есть combobox, который не позволяет вводить текст. Из-за этого мне не нужна стрелка вниз; просто щелкнув в любом месте окна, выпадающее меню отключается.WPF Удалить стрелу из Combobox, но не панель прокрутки?

Я нашел этот ответ: WPF: ComboBox without dropdown button

Однако этот ответ удаляет стрелку вниз и в результате прокрутки в выпадающем меню. Я хотел бы просто удалить стрелку вниз, но не полосу прокрутки в раскрывающемся меню.

Как это возможно?

+0

Не было бы выпадающего списка, у которого есть редактирование текста, не требуется *, чтобы предложить доступность стрелки вниз, чтобы показать, что она может быть расширена? –

+0

Это очевидно в моем интерфейсе. Для этого не требуется ниспадающая стрелка. Просто щелкнув в любом месте выпадающего списка, вы увидите меню. –

ответ

0

К сожалению, вам необходимо будет отредактировать шаблон управления.

Этот шаблон удаляет стрелку вниз (предупреждение, оно очень длинное). Не стесняйтесь настраивать шаблон, как вам нравится. Я получил исходный шаблон от MSDN. Я просто прокомментировал строки, которые показывают глипа выпадающего списка, чтобы вы могли видеть, из чего они первоначально были похожи (найдите «Путь», чтобы найти их).

<Window 
    x:Class="comboNoArrow.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:local="clr-namespace:comboNoArrow" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    Title="MainWindow" 
    Width="525" 
    Height="350" 
    mc:Ignorable="d"> 
    <Window.Resources> 

     <!-- Control colors. --> 
     <Color x:Key="WindowColor">#FFE8EDF9</Color> 
     <Color x:Key="ContentAreaColorLight">#FFC5CBF9</Color> 
     <Color x:Key="ContentAreaColorDark">#FF7381F9</Color> 

     <Color x:Key="DisabledControlLightColor">#FFE8EDF9</Color> 
     <Color x:Key="DisabledControlDarkColor">#FFC5CBF9</Color> 
     <Color x:Key="DisabledForegroundColor">#FF888888</Color> 

     <Color x:Key="SelectedBackgroundColor">#FFC5CBF9</Color> 
     <Color x:Key="SelectedUnfocusedColor">#FFDDDDDD</Color> 

     <Color x:Key="ControlLightColor">White</Color> 
     <Color x:Key="ControlMediumColor">#FF7381F9</Color> 
     <Color x:Key="ControlDarkColor">#FF211AA9</Color> 

     <Color x:Key="ControlMouseOverColor">#FF3843C4</Color> 
     <Color x:Key="ControlPressedColor">#FF211AA9</Color> 


     <Color x:Key="GlyphColor">#FF444444</Color> 
     <Color x:Key="GlyphMouseOver">sc#1, 0.004391443, 0.002428215, 0.242281124</Color> 

     <!-- Border colors --> 
     <Color x:Key="BorderLightColor">#FFCCCCCC</Color> 
     <Color x:Key="BorderMediumColor">#FF888888</Color> 
     <Color x:Key="BorderDarkColor">#FF444444</Color> 

     <Color x:Key="PressedBorderLightColor">#FF888888</Color> 
     <Color x:Key="PressedBorderDarkColor">#FF444444</Color> 

     <Color x:Key="DisabledBorderLightColor">#FFAAAAAA</Color> 
     <Color x:Key="DisabledBorderDarkColor">#FF888888</Color> 

     <Color x:Key="DefaultBorderBrushDarkColor">Black</Color> 

     <!-- Control-specific resources. --> 
     <Color x:Key="HeaderTopColor">#FFC5CBF9</Color> 
     <Color x:Key="DatagridCurrentCellBorderColor">Black</Color> 
     <Color x:Key="SliderTrackDarkColor">#FFC5CBF9</Color> 

     <Color x:Key="NavButtonFrameColor">#FF3843C4</Color> 

     <LinearGradientBrush x:Key="MenuPopupBrush" StartPoint="0.5,0" EndPoint="0.5,1"> 
      <GradientStop Offset="0" Color="{DynamicResource ControlLightColor}" /> 
      <GradientStop Offset="0.5" Color="{DynamicResource ControlMediumColor}" /> 
      <GradientStop Offset="1" Color="{DynamicResource ControlLightColor}" /> 
     </LinearGradientBrush> 

     <LinearGradientBrush x:Key="ProgressBarIndicatorAnimatedFill" StartPoint="0,0" EndPoint="1,0"> 
      <LinearGradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Offset="0" Color="#000000FF" /> 
        <GradientStop Offset="0.4" Color="#600000FF" /> 
        <GradientStop Offset="0.6" Color="#600000FF" /> 
        <GradientStop Offset="1" Color="#000000FF" /> 
       </GradientStopCollection> 
      </LinearGradientBrush.GradientStops> 
     </LinearGradientBrush> 

     <ControlTemplate x:Key="ComboBoxToggleButton" TargetType="{x:Type ToggleButton}"> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition /> 
        <ColumnDefinition Width="20" /> 
       </Grid.ColumnDefinitions> 
       <Border 
        x:Name="Border" 
        Grid.ColumnSpan="2" 
        BorderThickness="1" 
        CornerRadius="2"> 
        <Border.BorderBrush> 
         <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
          <GradientStop Offset="0" Color="{DynamicResource BorderLightColor}" /> 
          <GradientStop Offset="1" Color="{DynamicResource BorderDarkColor}" /> 
         </LinearGradientBrush> 
        </Border.BorderBrush> 
        <Border.Background> 

         <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
          <LinearGradientBrush.GradientStops> 
           <GradientStopCollection> 
            <GradientStop Color="{DynamicResource ControlLightColor}" /> 
            <GradientStop Offset="1.0" Color="{DynamicResource ControlMediumColor}" /> 
           </GradientStopCollection> 
          </LinearGradientBrush.GradientStops> 
         </LinearGradientBrush> 

        </Border.Background> 
       </Border> 
       <Border 
        Grid.Column="0" 
        Margin="1" 
        CornerRadius="2,0,0,2"> 
        <Border.Background> 
         <SolidColorBrush Color="{DynamicResource ControlLightColor}" /> 
        </Border.Background> 
       </Border> 
       <!--<Path 
        x:Name="Arrow" 
        Grid.Column="1" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center" 
        Data="M 0 0 L 4 4 L 8 0 Z"> 
        <Path.Fill> 
         <SolidColorBrush Color="{DynamicResource GlyphColor}" /> 
        </Path.Fill> 
       </Path>--> 
       <VisualStateManager.VisualStateGroups> 
        <VisualStateGroup x:Name="CommonStates"> 
         <VisualState x:Name="Normal" /> 
         <VisualState x:Name="MouseOver"> 
          <Storyboard> 
           <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)"> 
            <EasingColorKeyFrame KeyTime="0" Value="{StaticResource ControlMouseOverColor}" /> 
           </ColorAnimationUsingKeyFrames> 
          </Storyboard> 
         </VisualState> 
         <VisualState x:Name="Pressed" /> 
         <VisualState x:Name="Disabled"> 
          <Storyboard> 
           <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)"> 
            <EasingColorKeyFrame KeyTime="0" Value="{StaticResource DisabledControlDarkColor}" /> 
           </ColorAnimationUsingKeyFrames> 
           <ColorAnimationUsingKeyFrames Storyboard.TargetName="Arrow" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"> 
            <EasingColorKeyFrame KeyTime="0" Value="{StaticResource DisabledForegroundColor}" /> 
           </ColorAnimationUsingKeyFrames> 
           <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(Border.BorderBrush).(GradientBrush.GradientStops)[1].(GradientStop.Color)"> 
            <EasingColorKeyFrame KeyTime="0" Value="{StaticResource DisabledBorderDarkColor}" /> 
           </ColorAnimationUsingKeyFrames> 
          </Storyboard> 
         </VisualState> 
        </VisualStateGroup> 
        <VisualStateGroup x:Name="CheckStates"> 
         <VisualState x:Name="Checked"> 
          <Storyboard> 
           <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)"> 
            <EasingColorKeyFrame KeyTime="0" Value="{StaticResource ControlPressedColor}" /> 
           </ColorAnimationUsingKeyFrames> 
          </Storyboard> 
         </VisualState> 
         <VisualState x:Name="Unchecked" /> 
         <VisualState x:Name="Indeterminate" /> 
        </VisualStateGroup> 
       </VisualStateManager.VisualStateGroups> 
      </Grid> 
     </ControlTemplate> 

     <ControlTemplate x:Key="ComboBoxTextBox" TargetType="{x:Type TextBox}"> 
      <Border 
       x:Name="PART_ContentHost" 
       Background="{TemplateBinding Background}" 
       Focusable="False" /> 
     </ControlTemplate> 

     <Style x:Key="{x:Type ComboBox}" TargetType="{x:Type ComboBox}"> 
      <Setter Property="SnapsToDevicePixels" Value="true" /> 
      <Setter Property="OverridesDefaultStyle" Value="true" /> 
      <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" /> 
      <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" /> 
      <Setter Property="ScrollViewer.CanContentScroll" Value="true" /> 
      <Setter Property="MinWidth" Value="120" /> 
      <Setter Property="MinHeight" Value="20" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type ComboBox}"> 
         <Grid> 
          <ToggleButton 
           x:Name="ToggleButton" 
           Grid.Column="2" 
           ClickMode="Press" 
           Focusable="false" 
           IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" 
           Template="{StaticResource ComboBoxToggleButton}" /> 
          <ContentPresenter 
           x:Name="ContentSite" 
           Margin="3,3,23,3" 
           HorizontalAlignment="Left" 
           VerticalAlignment="Stretch" 
           Content="{TemplateBinding SelectionBoxItem}" 
           ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" 
           ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" 
           IsHitTestVisible="False" /> 
          <TextBox 
           x:Name="PART_EditableTextBox" 
           Margin="3,3,23,3" 
           HorizontalAlignment="Left" 
           VerticalAlignment="Bottom" 
           Background="Transparent" 
           Focusable="True" 
           IsReadOnly="{TemplateBinding IsReadOnly}" 
           Style="{x:Null}" 
           Template="{StaticResource ComboBoxTextBox}" 
           Visibility="Hidden" /> 
          <Popup 
           x:Name="Popup" 
           AllowsTransparency="True" 
           Focusable="False" 
           IsOpen="{TemplateBinding IsDropDownOpen}" 
           Placement="Bottom" 
           PopupAnimation="Slide"> 
           <Grid 
            x:Name="DropDown" 
            MinWidth="{TemplateBinding ActualWidth}" 
            MaxHeight="{TemplateBinding MaxDropDownHeight}" 
            SnapsToDevicePixels="True"> 
            <Border x:Name="DropDownBorder" BorderThickness="1"> 
             <Border.BorderBrush> 
              <SolidColorBrush Color="{DynamicResource BorderMediumColor}" /> 
             </Border.BorderBrush> 
             <Border.Background> 
              <SolidColorBrush Color="{DynamicResource ControlLightColor}" /> 
             </Border.Background> 
            </Border> 
            <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True"> 
             <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" /> 
            </ScrollViewer> 
           </Grid> 
          </Popup> 
          <VisualStateManager.VisualStateGroups> 
           <VisualStateGroup x:Name="CommonStates"> 
            <VisualState x:Name="Normal" /> 
            <VisualState x:Name="MouseOver" /> 
            <VisualState x:Name="Disabled"> 
             <Storyboard> 
              <ColorAnimationUsingKeyFrames Storyboard.TargetName="PART_EditableTextBox" Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"> 
               <EasingColorKeyFrame KeyTime="0" Value="{StaticResource DisabledForegroundColor}" /> 
              </ColorAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="EditStates"> 
            <VisualState x:Name="Editable"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PART_EditableTextBox" Storyboard.TargetProperty="(UIElement.Visibility)"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" /> 
              </ObjectAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentSite" Storyboard.TargetProperty="(UIElement.Visibility)"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}" /> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Uneditable" /> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
         </Grid> 
         <ControlTemplate.Triggers> 
          <Trigger Property="HasItems" Value="false"> 
           <Setter TargetName="DropDownBorder" Property="MinHeight" Value="95" /> 
          </Trigger> 
          <Trigger Property="IsGrouping" Value="true"> 
           <Setter Property="ScrollViewer.CanContentScroll" Value="false" /> 
          </Trigger> 
          <Trigger SourceName="Popup" Property="AllowsTransparency" Value="true"> 
           <Setter TargetName="DropDownBorder" Property="CornerRadius" Value="4" /> 
           <Setter TargetName="DropDownBorder" Property="Margin" Value="0,2,0,0" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <Style x:Key="{x:Type ComboBoxItem}" TargetType="{x:Type ComboBoxItem}"> 
      <Setter Property="SnapsToDevicePixels" Value="true" /> 
      <Setter Property="OverridesDefaultStyle" Value="true" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type ComboBoxItem}"> 
         <Border 
          x:Name="Border" 
          Padding="2" 
          Background="Transparent" 
          SnapsToDevicePixels="true"> 
          <ContentPresenter /> 
          <VisualStateManager.VisualStateGroups> 
           <VisualStateGroup x:Name="SelectionStates"> 
            <VisualState x:Name="Unselected" /> 
            <VisualState x:Name="Selected"> 
             <Storyboard> 
              <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"> 
               <EasingColorKeyFrame KeyTime="0" Value="{StaticResource SelectedBackgroundColor}" /> 
              </ColorAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="SelectedUnfocused"> 
             <Storyboard> 
              <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"> 
               <EasingColorKeyFrame KeyTime="0" Value="{StaticResource SelectedUnfocusedColor}" /> 
              </ColorAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 
    <Canvas> 
     <ComboBox Width="100" /> 
    </Canvas> 
</Window>