2016-04-13 7 views
1

Ich verwende eine Testversion von SciChart und mache einige Tests.Die Bildlaufleiste und die X-Achsen-Etiketten austauschen

Ich muss Bildlaufleiste auf der X-Achse bringen.

Nach einigen Forschung und Analyse visuellen Baum, plane ich den Stil von SciChartSurface zu ändern und Achse und Bildlaufleiste, die im Stack-Panel platziert sind zu ersetzen.

Ist das die richtige Lösung? Wenn AxisAlignment auf Top gesetzt ist, kann der visuelle Baum abweichen. Wenn das der richtige Weg ist, wo finde ich den Stil der Oberfläche? Bland erkennt Diagramm nicht und ich kann es nicht verwenden.

Antwort

1

Ich spielte mit diesem und es ist möglich, eine Bildlaufleiste über eine XAchse durch Templating der Achsensteuerung selbst zu erreichen. Hier

ist die Standardsteuerungsschablone für die AxisBase Steuerung (SciChart v4)

<ControlTemplate TargetType="axes:AxisBase"> 
    <Border Background="{TemplateBinding Background}" 
      BorderBrush="{TemplateBinding BorderBrush}" 
      BorderThickness="{TemplateBinding BorderThickness}" 
      ap:Device.SnapsToDevicePixels="True"> 

     <StackPanel x:Name="PART_AxisContainer" 
        HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" 
        Orientation="{Binding AxisAlignment, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay, Converter={StaticResource AxisAlignmentToAxisOrientationConverter}, ConverterParameter=Inverse}" 
        ap:Device.SnapsToDevicePixels="True" 
        apc:AxisLayoutHelper.AxisAlignment="{Binding AxisAlignment, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}"> 

      <Grid HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" 
        Canvas.ZIndex="1" 
        ap:Device.SnapsToDevicePixels="True" 
        apc:AxisLayoutHelper.IsInsideItem="True"> 

       <themes:AxisPanel x:Name="PART_AxisCanvas" 
            AxisAlignment="{TemplateBinding AxisAlignment}" 
            Background="Transparent" 
            DrawLabels="{TemplateBinding DrawLabels}" 
            DrawMajorTicks="{TemplateBinding DrawMajorTicks}" 
            DrawMinorTicks="{TemplateBinding DrawMinorTicks}" 
            IsLabelCullingEnabled="{TemplateBinding IsLabelCullingEnabled}" 
            MajorTickLineStyle="{TemplateBinding MajorTickLineStyle}" 
            MinorTickLineStyle="{TemplateBinding MinorTickLineStyle}" 
            ap:Device.SnapsToDevicePixels="True"> 

        <Image x:Name="PART_AxisBitmapImage" 
          HorizontalAlignment="Stretch" 
          VerticalAlignment="Stretch" 
          Stretch="Fill" 
          ap:Device.SnapsToDevicePixels="True" /> 

        <Grid x:Name="PART_LabelsCanvas" Margin="{Binding LabelToTickIndent, RelativeSource={RelativeSource FindAncestor, AncestorType=themes:AxisPanel}, Mode=OneWay}"> 
         <themes:TickLabelAxisCanvas AutoFitMarginalLabels="{TemplateBinding AutoFitMarginalLabels}" 
                Background="Transparent" 
                ClipToBounds="False" 
                IsLabelCullingEnabled="{TemplateBinding IsLabelCullingEnabled}" 
                ap:Device.SnapsToDevicePixels="True" /> 
         <themes:TickLabelAxisCanvas AutoFitMarginalLabels="{TemplateBinding AutoFitMarginalLabels}" 
                Background="Transparent" 
                ClipToBounds="False" 
                IsLabelCullingEnabled="{TemplateBinding IsLabelCullingEnabled}" 
                Visibility="Collapsed" 
                ap:Device.SnapsToDevicePixels="True" /> 
        </Grid> 

        <labelProviders:AxisTitle Orientation="{TemplateBinding Orientation}" 
               Style="{TemplateBinding TitleStyle}" 
               Visibility="{Binding Content, RelativeSource={RelativeSource Self}, Converter={StaticResource CollapseIfNullOrEmptyStringConverter}}" /> 
       </themes:AxisPanel> 

       <themes:ModifierAxisCanvas x:Name="PART_ModifierAxisCanvas" 
              HorizontalAlignment="Stretch" 
              VerticalAlignment="Stretch" 
              ap:Device.SnapsToDevicePixels="True" /> 
      </Grid> 

      <ContentPresenter Content="{TemplateBinding Scrollbar}" apc:AxisLayoutHelper.IsOutsideItem="True" /> 
     </StackPanel> 
    </Border> 
</ControlTemplate> 

Hier ist die modifizierte Vorlage (einschließlich Konvertern)

<s:DateTimeAxis AxisAlignment="Bottom" 
      AxisTitle="Top Axis" 
      BorderThickness="0,0,0,1" 
      Id="TopAxisId"> 
<s:DateTimeAxis.Resources> 
    <s:AxisAlignmentToAxisOrientationConverter x:Key="AxisAlignmentToAxisOrientationConverter" /> 
    <s:CollapseIfNullOrEmptyStringConverter x:Key="CollapseIfNullOrEmptyStringConverter" /> 
</s:DateTimeAxis.Resources> 
<s:DateTimeAxis.Template> 
    <ControlTemplate TargetType="s:AxisBase"> 
     <Border Background="{TemplateBinding Background}" 
     BorderBrush="{TemplateBinding BorderBrush}" 
     BorderThickness="{TemplateBinding BorderThickness}" 
     s:Device.SnapsToDevicePixels="True"> 

      <StackPanel x:Name="PART_AxisContainer" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch" 
       Orientation="{Binding AxisAlignment, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay, Converter={StaticResource AxisAlignmentToAxisOrientationConverter}, ConverterParameter=Inverse}" 
       s:Device.SnapsToDevicePixels="True" 
       s:AxisLayoutHelper.AxisAlignment="{Binding AxisAlignment, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}"> 

       <ContentPresenter Content="{TemplateBinding Scrollbar}" /> 

       <Grid HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch" 
       Canvas.ZIndex="1" 
       s:Device.SnapsToDevicePixels="True" 
       > 

        <s:AxisPanel x:Name="PART_AxisCanvas" 
           AxisAlignment="{TemplateBinding AxisAlignment}" 
           Background="Transparent" 
           DrawLabels="{TemplateBinding DrawLabels}" 
           DrawMajorTicks="{TemplateBinding DrawMajorTicks}" 
           DrawMinorTicks="{TemplateBinding DrawMinorTicks}" 
           IsLabelCullingEnabled="{TemplateBinding IsLabelCullingEnabled}" 
           MajorTickLineStyle="{TemplateBinding MajorTickLineStyle}" 
           MinorTickLineStyle="{TemplateBinding MinorTickLineStyle}" 
           s:Device.SnapsToDevicePixels="True"> 

         <Image x:Name="PART_AxisBitmapImage" 
         HorizontalAlignment="Stretch" 
         VerticalAlignment="Stretch" 
         Stretch="Fill" 
         s:Device.SnapsToDevicePixels="True" /> 

         <Grid x:Name="PART_LabelsCanvas" Margin="{Binding LabelToTickIndent, RelativeSource={RelativeSource FindAncestor, AncestorType=s:AxisPanel}, Mode=OneWay}"> 
          <s:TickLabelAxisCanvas AutoFitMarginalLabels="{TemplateBinding AutoFitMarginalLabels}" 
               Background="Transparent" 
               ClipToBounds="False" 
               IsLabelCullingEnabled="{TemplateBinding IsLabelCullingEnabled}" 
               s:Device.SnapsToDevicePixels="True" /> 
          <s:TickLabelAxisCanvas AutoFitMarginalLabels="{TemplateBinding AutoFitMarginalLabels}" 
               Background="Transparent" 
               ClipToBounds="False" 
               IsLabelCullingEnabled="{TemplateBinding IsLabelCullingEnabled}" 
               Visibility="Collapsed" 
               s:Device.SnapsToDevicePixels="True" /> 
         </Grid> 

         <s:AxisTitle Orientation="{TemplateBinding Orientation}" 
              Style="{TemplateBinding TitleStyle}" 
              Visibility="{Binding Content, RelativeSource={RelativeSource Self}, Converter={StaticResource CollapseIfNullOrEmptyStringConverter}}" /> 
        </s:AxisPanel> 

        <s:ModifierAxisCanvas x:Name="PART_ModifierAxisCanvas" 
             HorizontalAlignment="Stretch" 
             VerticalAlignment="Stretch" 
             s:Device.SnapsToDevicePixels="True" /> 
       </Grid> 


      </StackPanel> 
     </Border> 
    </ControlTemplate> 
</s:DateTimeAxis.Template> 
<s:DateTimeAxis.Scrollbar> 
    <s:SciChartScrollbar Margin="0 3 0 0" /> 
</s:DateTimeAxis.Scrollbar> 
</s:DateTimeAxis> 

Dieser Code enthält die Standardsteuer Template der AxisBase in SciChart, entfernt jedoch zwei kritische angefügte Eigenschaften: AxisLayoutHelper.IsOutsideItem/IsInsideItem. Diese Eigenschaften werden verwendet, um die Reihenfolge von Achse vs, Scrollbar abhängig von der Ausrichtung der Achse anzupassen. Wenn Sie sie entfernen, können Sie den ContentPresenter für die Bildlaufleiste überall platzieren und er bleibt stehen.

Dies wird als Arbeits in v4 von SciChart WPF für Antwort

+1

Dank getestet. Ich werde andere Lösung verwenden, da Leistungsprobleme mit aktuellen Hilfsstrichbeschriftungen auftreten. Ich habe etwa 100 wichtige Ticks und rendere als WPF ohne DirectX. Planen Sie, Etiketten innerhalb der Oberfläche zu verschieben. –

+0

Hallo Samvel, das ist wahr, wir erstellen Etiketten mit WPF TextBlock, was Dinge wie das Zeichnen von Unicode-Text oder die Verwaltung von Schriften (die alle in DirectX geschrieben werden müssen) erheblich vereinfacht. Fühlen Sie sich frei, eine andere Frage zu öffnen, wenn Sie Probleme haben! –