2017-10-13 33 views
-4

私は自分のグラフィックスタイルのListViewを作成しようとしていますが、ソースコードを理解できません。誰も私に以下のコードの個々の部分を説明することはできますか?WPF ListView ControlTemplateのカスタマイズ

<!-- =========================================================== ListView ============================================================ --> 
<Style x:Key="{x:Static GridView.GridViewScrollViewerStyleKey}" TargetType="ScrollViewer"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ScrollViewer"> 
       <Grid Background="{TemplateBinding Background}"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*"/> 
         <ColumnDefinition Width="Auto"/> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="*"/> 
         <RowDefinition Height="Auto"/> 
        </Grid.RowDefinitions> 

        <DockPanel Margin="{TemplateBinding Padding}"> 
         <ScrollViewer DockPanel.Dock="Top" 
             HorizontalScrollBarVisibility="Hidden" 
             VerticalScrollBarVisibility="Hidden" 
             Focusable="false"> 
          <GridViewHeaderRowPresenter Margin="2,0,2,0" 
                 Columns="{Binding Path=TemplatedParent.View.Columns, RelativeSource={RelativeSource TemplatedParent}}" 
                 ColumnHeaderContainerStyle="{Binding Path=TemplatedParent.View.ColumnHeaderContainerStyle, RelativeSource={RelativeSource TemplatedParent}}" 
                 ColumnHeaderTemplate="{Binding Path=TemplatedParent.View.ColumnHeaderTemplate, RelativeSource={RelativeSource TemplatedParent}}" 
                 ColumnHeaderTemplateSelector="{Binding Path=TemplatedParent.View.ColumnHeaderTemplateSelector, RelativeSource={RelativeSource TemplatedParent}}" 
                 AllowsColumnReorder="{Binding Path=TemplatedParent.View.AllowsColumnReorder, RelativeSource={RelativeSource TemplatedParent}}" 
                 ColumnHeaderContextMenu="{Binding Path=TemplatedParent.View.ColumnHeaderContextMenu, RelativeSource={RelativeSource TemplatedParent}}" 
                 ColumnHeaderToolTip="{Binding Path=TemplatedParent.View.ColumnHeaderToolTip, RelativeSource={RelativeSource TemplatedParent}}" 
                 SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
         </ScrollViewer> 

         <ScrollContentPresenter Name="PART_ScrollContentPresenter" 
               KeyboardNavigation.DirectionalNavigation="Local" 
               CanContentScroll="True" CanHorizontallyScroll="False" 
               CanVerticallyScroll="False"/> 
        </DockPanel> 

        <ScrollBar Name="PART_HorizontalScrollBar" 
           Orientation="Horizontal" 
           Grid.Row="1" 
           Maximum="{TemplateBinding ScrollableWidth}" 
           ViewportSize="{TemplateBinding ViewportWidth}" 
           Value="{TemplateBinding HorizontalOffset}" 
           Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/> 

        <ScrollBar Name="PART_VerticalScrollBar" 
           Grid.Column="1" 
           Maximum="{TemplateBinding ScrollableHeight}" 
           ViewportSize="{TemplateBinding ViewportHeight}" 
           Value="{TemplateBinding VerticalOffset}" 
           Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/> 

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

<Style x:Key="GridViewColumnHeaderGripper" TargetType="Thumb"> 
    <Setter Property="Width" Value="18"/> 
    <Setter Property="Background" Value="{DynamicResource NormalBorderBrush}"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Thumb}"> 
       <Border Padding="{TemplateBinding Padding}" 
         Background="Transparent"> 
        <Rectangle HorizontalAlignment="Center" 
           Width="1" 
           Fill="{TemplateBinding Background}"/> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<Style x:Key="{x:Type GridViewColumnHeader}" TargetType="GridViewColumnHeader"> 
    <Setter Property="HorizontalContentAlignment" Value="Center"/> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="GridViewColumnHeader"> 
       <Grid> 
        <Border Name="HeaderBorder" 
          BorderThickness="0,1,0,1" 
          BorderBrush="{DynamicResource NormalBorderBrush}" 
          Background="{DynamicResource LightBrush}" 
          Padding="2,0,2,0"> 
         <ContentPresenter Name="HeaderContent" 
              Margin="0,0,0,1" 
              VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
              RecognizesAccessKey="True" 
              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
        </Border> 
        <Thumb x:Name="PART_HeaderGripper" 
          HorizontalAlignment="Right" 
          Margin="0,0,-9,0" 
          Style="{StaticResource GridViewColumnHeaderGripper}"/> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="true"> 
         <Setter TargetName="HeaderBorder" Property="Background" Value="{DynamicResource NormalBrush}"/> 
        </Trigger> 
        <Trigger Property="IsPressed" Value="true"> 
         <Setter TargetName="HeaderBorder" Property="Background" Value="{DynamicResource PressedBrush}"/> 
         <Setter TargetName="HeaderContent" Property="Margin" Value="1,1,0,0"/> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="Role" Value="Floating"> 
      <Setter Property="Opacity" Value="0.7"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="GridViewColumnHeader"> 
         <Canvas Name="PART_FloatingHeaderCanvas"> 
          <Rectangle Fill="#60000000" 
             Width="{TemplateBinding ActualWidth}" 
             Height="{TemplateBinding ActualHeight}"/> 
         </Canvas> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Trigger> 
     <Trigger Property="Role" Value="Padding"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="GridViewColumnHeader"> 
         <Border Name="HeaderBorder" 
           BorderThickness="0,1,0,1" 
           BorderBrush="{DynamicResource NormalBorderBrush}" 
           Background="{DynamicResource LightBrush}"/> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

<Style TargetType="{x:Type local:VsListView}"> 
    <Setter Property="SnapsToDevicePixels" Value="true"/> 
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="ScrollViewer.CanContentScroll" Value="true"/> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:VsListView}"> 
       <Border Name="Border" 
         BorderThickness="1" 
         CornerRadius="{DynamicResource MainCornerRadius}" 
         BorderBrush="{DynamicResource SolidBorderBrush}" 
         Background="Red"> 
        <ScrollViewer Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}"> 
         <ItemsPresenter /> 
        </ScrollViewer> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsGrouping" Value="true"> 
         <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter TargetName="Border" Property="Background" Value="{DynamicResource DisabledBorderBrush}"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

ヘッダー部分のビジュアルスタイルを変更するにはどうすればよいですか?コードのどの部分がこの問題に対処していますか? スクリーンショットを添付しました。私は白い長方形でinsterestedよ:

enter image description here

+0

'GridViewHeaderRowPresenter' - あなたはこのコードを読んでいますか? –

+0

もちろんこのコードを読んでいますが、私が行った変更は反映されていません。このコード部分を削除しても白い矩形はまだそこにあります。 –

+0

おそらく、それは 'ListView'ではなく、' ScrollViewer'のためのスタイリングだからです...もう一度、このコードを読んでもらえますか?最初の行に 'TargetType =" ScrollViewer "' –

答えて

0

私はその後、ちょうどあなたのニーズに合わせて編集し、デフォルトのスタイリングとContentTemplateを取得するためにブレンドを使用することができことをお勧めしたい(コントロールの名前が使用されていることを覚えておいてくださいテンプレートは、特定のコントロールの背後にあるロジックにとって重要な意味を持つ可能性があるので、編集しているものに注意してください)。

Blendを使用してコントロールのテンプレートを取得する方法がわからない場合は、documentation of Telerik controlsで説明されている簡単なチュートリアルがあります(これはすべてのコントロールで同じです)。 ListView.ContentTemplateのコピーを作成してアプリケーションに貼り付けるだけでよいので、編集(編集)してもいいです。

+0

ありがとう、私はこれを試してください。 –

+0

ちょうどいいヒント:「オブジェクトとタイムライン」パネルで、コントロール用のテンプレートを作成すると、おそらく新しい階層が表示されます。それは、コントロールのビジュアルツリーにさらに深く入るだけです。新しいテンプレートを生成できる場合は、新しいリストのすべての位置を確認します。コントロールは独自のスタイリングを持つコントロールから構築されることが非常に多いです。 –