使用 TabControl 时 SciChart CompositeAnnotation 消失

问题描述 投票:0回答:2

我创建了一个复合注释(名为 PeakAnnotation),它由四个元素组成:两个 VerticalLineAnnotations、一个 BoxAnnotation 和一个 TextAnnotation。 当我第一次添加注释时,一切都显示正确。 但是,当我在 TabControl 中的选项卡之间进行更改时...BoxAnnotation 消失了。 当我用光标拖动复合注释将其移动几个像素时,该框将重新出现。

我已尝试致电

ZoomExtents()
InvalidateElement()
,但未能解决问题。

我创建了一个简单的应用程序,以最简单的方式重现该问题。

PeakAnnotation.xaml

<s:CompositeAnnotation x:Class="WpfPresentation.Views.PeakAnnotation"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:s="http://schemas.abtsoftware.co.uk/scichart"
                Canvas.ZIndex="1" 
                DragDirections="XDirection"
                ResizeDirections="XDirection"
                IsEditable="True">

<s:CompositeAnnotation.Annotations>
    <s:VerticalLineAnnotation CoordinateMode="Relative" Stroke="#FFBADAFF" StrokeThickness="2" X1="0" X2="0" Y1="0" Y2="1"/>
    <s:VerticalLineAnnotation CoordinateMode="Relative" Stroke="#FFBADAFF" StrokeThickness="2" X1="1" X2="1" Y1="0" Y2="1"/>
    <s:BoxAnnotation x:Name="box" Opacity="0.2" CornerRadius="2" Background="#FFBADAFF" BorderBrush="#1964FF" CoordinateMode="Relative" X1="0" X2="1" Y1="0" Y2="1"/>
    <s:TextAnnotation x:Name="AnnotationTextLabel" CoordinateMode="Relative" X1="0" Y1="0.95" FontSize="12" Foreground="White"/>
</s:CompositeAnnotation.Annotations>

</s:CompositeAnnotation>

PeakAnnotation.xaml.cs

public partial class PeakAnnotation : CompositeAnnotation
{
    public PeakAnnotation()
    {

    }
    
    public PeakAnnotation(string annotationText)
    {
        InitializeComponent();
        AnnotationTextLabel.Text = annotationText;
    }

    public string StyleKey { get; set; }

    public Type ViewType => throw new NotImplementedException();
}

MainViewModel.cs

public MainViewModel()
    {
        ChartTitle = "Testing";

        Annotations = new AnnotationCollection();

        var myAnnotation = new PeakAnnotation("My Annotation Title")
        {
            X1 = 40,
            X2 = 50,
            Y1 = 0,
            Y2 = 100
        };

        Annotations.Add(myAnnotation);
    }
    public string ChartTitle { get; set; }
    public AnnotationCollection Annotations { get; set; }
}

MainWindow.xaml

<Window x:Class="SciChartTesting.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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:SciChartTesting" xmlns:s="http://schemas.abtsoftware.co.uk/scichart"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">

<Window.Resources>
    <local:MainViewModel x:Key="MainViewModel"/>
</Window.Resources>

<Grid DataContext="{StaticResource MainViewModel}">
    <TabControl>
        <TabItem Header="TabOne">
            <Label Content="This is TabOne"/>
        </TabItem>
        <TabItem Header="TabTwo">
            <s:SciChartSurface ChartTitle="{Binding ChartTitle}" Annotations="{Binding Annotations}">
                <s:SciChartSurface.XAxis>
                    <s:NumericAxis VisibleRange="0,100"/>
                </s:SciChartSurface.XAxis>
                <s:SciChartSurface.YAxis>
                    <s:NumericAxis VisibleRange="0,100"/>
                </s:SciChartSurface.YAxis>
            </s:SciChartSurface>
        </TabItem>
    </TabControl>
</Grid>

工作注释: working example

损坏的注释: enter image description here

c# wpf scichart
2个回答
1
投票

TabControl
仅使用单个共享的
ContentPresenter
来显示
TabItem
的内容。这意味着它完全从选项卡导航之间的可视化树中删除内容。不会保留装饰层或触发器状态等渲染细节。您必须在内容加载时显式重绘注释元素,例如使用触发器。


0
投票

希望你一切顺利。 非常感谢您在这里和 SciChart 论坛

报告此事

我很高兴通知您,我们添加了一项改进,修复了使用 TabControl 时的复合注释行为。

这些更改是在最新的 SciChart v8.6.0.28221 修补程序版本中提供的。 在这里您可以找到有关我们最新版本以及如何获取它们的更多详细信息:

SciChart WPF 变更日志 – SciChart

请尝试一下并让我们知道您的反馈。

亲切的问候, 莱克斯, SciChart 技术支持工程师

© www.soinside.com 2019 - 2024. All rights reserved.