Удаление (свертывание) DataPoints в LineSeries?

Я хочу удалить маркеры точек данных из LineSeries на моей диаграмме Silverlight. Единственный способ, который я нашел в Интернете, - установить для VisibilityProperty значение Collapse.

// не работает в текущем выпуске инструментария SL var CollapseDataPointSetter = new Setter(Control.VisibilityProperty, Visibility.Collapsed);

Но это не работает для текущей версии набора инструментов SL. Как удалить или скрыть маркеры DataPoint в текущей версии?


person devployment    schedule 05.02.2010    source источник


Ответы (3)


пантархей,

Используйте следующие стили диаграмм (со ссылками на шаблоны), чтобы скрыть точки данных. Я включил стили как для LineSeries, так и для AreaSeries.

Удачи, Джим

<ControlTemplate x:Key="CommonAreaSeriesDataPointTemplate" TargetType="charting:AreaDataPoint">
    <!--Comment out data points from the default template; just an empty template-->
    <Grid x:Name="Root" Opacity="1">
        <!--<ToolTipService.ToolTip>
            <StackPanel Margin="2,2,2,2">
                <ContentControl Content="{TemplateBinding FormattedDependentValue}" />
                <ContentControl Content="{TemplateBinding FormattedIndependentValue}" />
            </StackPanel>
        </ToolTipService.ToolTip>
        <Ellipse StrokeThickness="{TemplateBinding BorderThickness}" Stroke="{TemplateBinding BorderBrush}" Fill="{TemplateBinding Background}" />-->
    </Grid>
</ControlTemplate>
<Style x:Key="CommonAreaSeriesDataPoint" TargetType="charting:AreaDataPoint">
    <Setter Property="Background" Value="{StaticResource CommonAreaSeriesBackground}" />
    <Setter Property="Template" Value="{StaticResource CommonAreaSeriesDataPointTemplate}" />
</Style>
<Style x:Key="CommonAreaSeriesPath" TargetType="Path">
    <Setter Property="StrokeThickness" Value="1" />
    <Setter Property="Stroke" Value="DarkGray" />
    <Setter Property="Effect" Value="{StaticResource DialogDropShadow}" />
</Style>
<ControlTemplate x:Key="CommonLineSeriesDataPointTemplate" TargetType="charting:LineDataPoint">
    <!--Comment out data points from the default template; just an empty template-->
    <Grid x:Name="Root" Opacity="1">
        <!--<ToolTipService.ToolTip>
            <StackPanel Margin="2,2,2,2">
                <ContentControl Content="{TemplateBinding FormattedDependentValue}" />
                <ContentControl Content="{TemplateBinding FormattedIndependentValue}" />-->
        <!--Example of how to access the bound business object-->
        <!--<ContentControl Content="{Binding Amount}" DataContext="{TemplateBinding DataContext}" />-->
        <!--</StackPanel>
        </ToolTipService.ToolTip>-->
        <!--<Ellipse StrokeThickness="{TemplateBinding BorderThickness}" Stroke="{TemplateBinding BorderBrush}" Fill="{TemplateBinding Background}" />-->
    </Grid>
</ControlTemplate>
<Style x:Key="CommonLineSeriesDataPoint" TargetType="charting:LineDataPoint">
    <Setter Property="IndependentValueStringFormat" Value="{}{0:yyyy}" />
    <Setter Property="DependentValueStringFormat" Value="{}{0:c0}" />
    <Setter Property="Background" Value="#FF0077CC" />
    <Setter Property="BorderBrush" Value="White" />
    <Setter Property="BorderThickness" Value="2" />
    <Setter Property="IsTabStop" Value="False" />
    <Setter Property="Template" Value="{StaticResource CommonLineSeriesDataPointTemplate}" />
</Style>
<Style x:Key="CommonLineSeriesPolyline" TargetType="Polyline">
    <Setter Property="StrokeThickness" Value="5" />
    <Setter Property="Effect" Value="{StaticResource DialogDropShadow}" />
</Style>
<!-- Implicit non-Key'd Styles BasedOn Common Explicit Key'd Styles above -->
<Style TargetType="charting:AreaSeries">
    <Setter Property="DataPointStyle" Value="{StaticResource CommonAreaSeriesDataPoint}" />
    <Setter Property="PathStyle" Value="{StaticResource CommonAreaSeriesPath}" />
</Style>
<Style TargetType="charting:LineSeries">
    <Setter Property="DataPointStyle" Value="{StaticResource CommonLineSeriesDataPoint}" />
    <Setter Property="PolylineStyle" Value="{StaticResource CommonLineSeriesPolyline}" />
</Style>
person Jim McCurdy    schedule 05.02.2010
comment
Спасибо. Попробую. Но, кажется, это то, что я ищу. - person devployment; 11.02.2010
comment
Прекрасно работает и в WPF... Большое спасибо. - person sprite; 31.08.2010
comment
Большое спасибо @Jim за приведенный выше код. Однако в этом подходе мне не хватает одной вещи: цвет линии в LineSeries становится фиксированным для значения фона, установленного в стиле LineDataPoint для всех рядов на диаграмме. Удаление фонового сеттера тоже не помогает, это только другой цвет фикса. Есть ли способ, чтобы цвета линий автоматически отличались для разных серий линий с помощью вышеуказанного подхода? - person Anders Gustafsson; 23.11.2011
comment
@Anders, это может сработать, если вы закомментируете свойство Setter for Background в CommonAreaSeriesDataPoint. Или, возможно, привяжите свойство Background к другому элементу Brush. - person Jim McCurdy; 29.11.2011

Делать это со стилями, на мой взгляд, не лучший подход, потому что у вас все еще есть огромное количество визуальных элементов, когда у вас также есть много точек данных, таких как биржевая диаграмма.

public class LineSeriesEx : LineSeries
{
    protected override DataPoint CreateDataPoint()
    {
        return new EmptyDataPoint();
    }
}

public class EmptyDataPoint : DataPoint
{
    // As the method name says, this DataPoint is empty.
}

Делая это таким образом, у вас почти в пять раз меньше визуалов, чем когда вы просто устанавливаете какой-то стиль.

person Sam    schedule 06.07.2012
comment
Это простое решение по сравнению с XAML. - person Sid; 30.03.2016

Я использовал решение Джима (кстати, большое спасибо, ОГРОМНАЯ помощь) и применил его к шаблону диаграммы по умолчанию.

В области палитры у вас есть словарь ресурсов для каждой строки в серии.

Вот как я смог избавиться от него с помощью шаблона управления Джима, и я могу поместить его в каждый ResourceDictonary, поэтому мне не нужно делать это построчно.

<toolkit:ResourceDictionaryCollection>
<ResourceDictionary>
<!-- I wanted a solid color brush so I just went ahead and defined it in the palette-->
<SolidColorBrush x:Key="Background" Color="Green"/>
<Style x:Key="DataPointStyle" TargetType="Control">
<Setter Property="Background" Value="{StaticResource Background}"/>
<!-- below is where I entered Jim's control template into the default palette defined-->
<Setter Property="Template">
<ControlTemplate TargetType="charting:LineDataPoint">
<Grid x:Name="Root" Opacity="1"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
</toolkit:ResourceDictionaryCollection>

По крайней мере, это сработало для меня и сэкономило мне много времени (и уже спасло много моих волос, прежде чем я их вырвал)

person Sharon    schedule 11.10.2012