2017-04-24 69 views
0

我目前正試圖在WPF中實現我自己的程式化的組合框。一切工作正常,除了scrollviewer。簡而言之,垂直滾動條不起作用。以下是圖像:WPF風格的滾動查看器不滾動

enter image description here

正如你所看到的,垂直滾動條滾動一路下跌,但似乎並沒有引起實際滾動效果。 Combobox中有12個虛擬物品。我在線閱讀ScrollViewer風格需要三件事情:ScrollContentPresenter,VerticalScrollBar和Horizo​​ntalScrollBar。在我的ScrollViewer的風格,主要內容如下我有三個聲明:

<Style x:Key="VoidwalkerDarkScrollviewer" TargetType="{x:Type ScrollViewer}"> 
      <Setter Property="HorizontalContentAlignment" Value="Left" /> 
      <Setter Property="VerticalContentAlignment" Value="Top" /> 
      <Setter Property="VerticalScrollBarVisibility" Value="Visible" /> 
      <Setter Property="Padding" Value="4" /> 
      <Setter Property="BorderThickness" Value="1" /> 
      <Setter Property="BorderBrush"> 
       <Setter.Value> 
        <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1"> 
         <GradientStop Offset="0" Color="#FFA3AEB9" /> 
         <GradientStop Offset="0.375" Color="#FF8399A9" /> 
         <GradientStop Offset="0.375" Color="#FF718597" /> 
         <GradientStop Offset="1" Color="#FF617584" /> 
        </LinearGradientBrush> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ScrollViewer"> 
         <Border 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}" 
          CornerRadius="2"> 
          <Grid Background="{TemplateBinding Background}"> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="*" /> 
            <RowDefinition Height="Auto" /> 
           </Grid.RowDefinitions> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="*" /> 
            <ColumnDefinition Width="Auto" /> 
           </Grid.ColumnDefinitions> 

           <ScrollContentPresenter 
            x:Name="ScrollContentPresenter" 
            Margin="{TemplateBinding Padding}" 
            ContentTemplate="{TemplateBinding ContentTemplate}" 
            Cursor="{TemplateBinding Cursor}" /> 

           <Rectangle 
            Grid.Row="1" 
            Grid.Column="1" 
            Fill="#FFE9EEF4" /> 

           <ScrollBar 
            x:Name="VerticalScrollBar" 
            Grid.Row="0" 
            Grid.Column="1" 
            Width="18" 
            Margin="0,-1,-1,-1" 
            Background="Red" 
            IsTabStop="False" 
            Maximum="{TemplateBinding ScrollableHeight}" 
            Minimum="0" 
            Orientation="Vertical" 
            ViewportSize="{TemplateBinding ViewportHeight}" 
            Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" 
            Value="{TemplateBinding VerticalOffset}" /> 

           <ScrollBar 
            x:Name="HorizontalScrollBar" 
            Grid.Row="1" 
            Grid.Column="0" 
            Height="18" 
            Margin="-1,0,-1,-1" 
            IsTabStop="False" 
            Maximum="{TemplateBinding ScrollableWidth}" 
            Minimum="0" 
            Orientation="Horizontal" 
            ViewportSize="{TemplateBinding ViewportWidth}" 
            Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" 
            Value="{TemplateBinding HorizontalOffset}" /> 

          </Grid> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

,這裏是我的組合框風格在風格上的意見建議(省略這是不相關的羣衆演員)

<Style x:Key="VoidwalkerDarkComboBox" 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="ComboBox"> 
       <Grid> 
        <ToggleButton 
         Name="ToggleButton" 
         Grid.Column="2" 
         ClickMode="Press" 
         Focusable="false" 
         IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" 
         Template="{StaticResource ComboBoxToggleButton}" /> 
        <ContentPresenter 
         Name="ContentSite" 
         Margin="3,3,23,3" 
         HorizontalAlignment="Left" 
         VerticalAlignment="Center" 
         Content="{TemplateBinding SelectionBoxItem}" 
         ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" 
         ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" 
         IsHitTestVisible="False" /> 
        <TextBox 
         x:Name="PART_EditableTextBox" 
         Margin="3,3,23,3" 
         HorizontalAlignment="Left" 
         VerticalAlignment="Center" 
         Background="Transparent" 
         Focusable="True" 
         Foreground="#d0d0d0" 
         IsReadOnly="{TemplateBinding IsReadOnly}" 
         Style="{x:Null}" 
         Template="{StaticResource ComboBoxTextBox}" 
         Text="{TemplateBinding Text}" 
         Visibility="Visible" /> 
        <Popup 
         Name="Popup" 
         AllowsTransparency="True" 
         Focusable="False" 
         IsOpen="{TemplateBinding IsDropDownOpen}" 
         Placement="Bottom" 
         PopupAnimation="Slide"> 
         <Grid 
          Name="DropDown" 
          MinWidth="{TemplateBinding ActualWidth}" 
          MaxHeight="{TemplateBinding MaxDropDownHeight}" 
          SnapsToDevicePixels="True"> 
          <Border 
           x:Name="DropDownBorder" 
           Background="#1b1b1c" 
           BorderBrush="#3f3f46" 
           BorderThickness="1" /> 
          <ScrollViewer 
           Margin="4,6,4,6" 
           SnapsToDevicePixels="True" 
           Style="{DynamicResource VoidwalkerDarkScrollviewer}"><!-- IF I REMOVE THIS STYLE EVERYTHING WORKS FINE !--> 
           <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" /> 
          </ScrollViewer> 
         </Grid> 
        </Popup> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="HasItems" Value="false"> 
         <Setter TargetName="DropDownBorder" Property="MinHeight" Value="95" /> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Foreground" Value="LightGray" /> 
        </Trigger> 
        <Trigger Property="IsGrouping" Value="true"> 
         <Setter Property="ScrollViewer.CanContentScroll" Value="false" /> 
        </Trigger> 
        <Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="true"> 
         <Setter TargetName="DropDownBorder" Property="CornerRadius" Value="0,0,4,4" /> 
         <Setter TargetName="DropDownBorder" Property="Margin" Value="0" /> 
        </Trigger> 
        <Trigger Property="IsEditable" Value="true"> 
         <Setter Property="IsTabStop" Value="false" /> 
         <Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible" /> 
         <Setter TargetName="ContentSite" Property="Visibility" Value="Hidden" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

,如果我只是從組合框中刪除ScrollViewer風格,一切都可以正常工作......但我需要它來完成我的黑暗主題。

有沒有人知道我錯過了什麼使這項工作?

+0

你爲什麼要重寫ScrollViewer模板?一切都可以在組合框模板中完成。要更改默認滾動條的外觀,請創建一個不帶鍵的隱式樣式'