La función de selección de Ignite UI for Blazor en Blazor {ComponentTitle} permite a los usuarios seleccionar, resaltar, delinear y, viceversa, anular la selección de una o varias series de forma interactiva dentro de un gráfico. Esto ofrece muchas posibilidades diferentes en cuanto a la forma en que los usuarios interactúan con los datos presentados de formas más significativas.
El comportamiento SelectionMode predeterminado está desactivado y requiere optar por una de las siguientes opciones. Hay varios modos de selección disponibles en: {ComponentName}
Auto
Ninguno
Brighten
DesvanecerOtros
Escala de grisesOtros
FocusColorThickOutline
FocusColorOutline
SelectionColorThickOutline
SelectionColorOutline
FocusColorFill
SelectionColorFill
Contorno grueso
Brighten desvanecerá el elemento seleccionado mientras FadeOthers que causará el efecto contrario. GrayscaleOthers se comportará de manera similar, FadeOthers pero en su lugar mostrará un color gris al resto de la serie. Tenga en cuenta que esto anulará cualquier SelectionBrush configuración. SelectionColorOutline y SelectionColorThickOutline trazará una frontera alrededor de la serie.
En conjunto, a está disponible para proporcionar un SelectionBehavior mayor control sobre los elementos que se seleccionan. El comportamiento predeterminado de Auto es PerSeriesAndDataItemMultiSelect.
Auto
PerDataItemMultiSelect
PerDataItemSingleSelect
PerSeriesAndDataItemMultiSelect
PerSeriesAndDataItemSingleSelect
PerSeriesAndDataItemGlobalSingleSelect
PerSeriesMultiSelect
PerSeriesSingleSelect
Configuración de la selección a través del relleno de color
En el siguiente ejemplo se muestra la combinación de ambos SelectionColorFill y Auto el comportamiento de selección, también conocido como PerSeriesAndDataItemMultiSelect. Los rellenos de color proporcionan una señal visual útil, ya que cambian el color de fondo de todo el elemento de la serie. Al hacer clic en cada elemento, verá que el artículo cambia de verde a morado.
EXAMPLE
MODULES
DATA
RAZOR
CSS
using System;
using System.Net.Http;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using IgniteUI.Blazor.Controls; // for registering Ignite UI modulesnamespaceInfragistics.Samples
{
publicclassProgram
{
publicstaticasync Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
// registering Ignite UI modules
builder.Services.AddIgniteUIBlazor(
typeof(IgbCategoryChartModule),
typeof(IgbDataChartInteractivityModule)
);
await builder.Build().RunAsync();
}
}
}cs
using System;
using System.Collections.Generic;
publicclassTemperatureAverageDataItem
{
publicstring Month { get; set; }
publicdouble Temperature { get; set; }
}
publicclassTemperatureAverageData
: List<TemperatureAverageDataItem>
{
publicTemperatureAverageData()
{
this.Add(new TemperatureAverageDataItem()
{
Month = @"Jan",
Temperature = 3
});
this.Add(new TemperatureAverageDataItem()
{
Month = @"Feb",
Temperature = 4
});
this.Add(new TemperatureAverageDataItem()
{
Month = @"Mar",
Temperature = 9
});
this.Add(new TemperatureAverageDataItem()
{
Month = @"Apr",
Temperature = 15
});
this.Add(new TemperatureAverageDataItem()
{
Month = @"May",
Temperature = 21
});
this.Add(new TemperatureAverageDataItem()
{
Month = @"Jun",
Temperature = 26
});
this.Add(new TemperatureAverageDataItem()
{
Month = @"Jul",
Temperature = 29
});
this.Add(new TemperatureAverageDataItem()
{
Month = @"Aug",
Temperature = 28
});
this.Add(new TemperatureAverageDataItem()
{
Month = @"Sep",
Temperature = 24
});
this.Add(new TemperatureAverageDataItem()
{
Month = @"Oct",
Temperature = 18
});
this.Add(new TemperatureAverageDataItem()
{
Month = @"Nov",
Temperature = 11
});
this.Add(new TemperatureAverageDataItem()
{
Month = @"Dec",
Temperature = 5
});
}
}cs
@using IgniteUI.Blazor.Controls<divclass="container vertical"><divclass="legend-title">
Average Temperature Range in New York
</div><divclass="container vertical fill"><IgbCategoryChartName="chart"
@ref="chart"ChartType="CategoryChartType.Column"DataSource="TemperatureAverageData"YAxisTitle="Temperature in Degrees Celsius"YAxisTitleLeftMargin="10"YAxisTitleRightMargin="5"YAxisLabelLeftMargin="0"IsHorizontalZoomEnabled="false"IsVerticalZoomEnabled="false"CrosshairsDisplayMode="CrosshairsDisplayMode.None"ToolTipType="ToolTipType.None"SelectionMode="SeriesSelectionMode.SelectionColorFill"SelectionBehavior="SeriesSelectionBehavior.Auto"SelectionBrush="purple"FocusBrush="purple"></IgbCategoryChart></div></div>@code {protectedoverrideasync Task OnAfterRenderAsync(bool firstRender)
{
var chart = this.chart;
}
private IgbCategoryChart chart;
private TemperatureAverageData _temperatureAverageData = null;
public TemperatureAverageData TemperatureAverageData
{
get
{
if (_temperatureAverageData == null)
{
_temperatureAverageData = new TemperatureAverageData();
}
return _temperatureAverageData;
}
}
}razor
/*
CSS styles are loaded from the shared CSS file located at:
https://static.infragistics.com/xplatform/css/samples/
*/css
¿Te gusta esta muestra? Obtenga acceso a nuestro kit de herramientas de Ignite UI for Blazor completo y comience a crear sus propias aplicaciones en minutos. Descárgalo gratis.
Configuración de la selección múltiple
Otros modos de selección ofrecen varios métodos de selección. Por ejemplo, el uso de SelectionBehavior con PerDataItemMultiSelect afectará a todas las series de toda la categoría cuando haya varias series presentes, al tiempo que permitirá la selección entre categorías. En comparación con PerDataItemSingleSelect, solo se puede seleccionar una sola categoría de artículos a la vez. Esto es útil si varias series están enlazadas a diferentes fuentes de datos y proporciona un mayor control de la selección entre categorías. PerSeriesAndDataItemGlobalSingleSelect Permite la selección de una sola serie en todas las categorías a la vez.
EXAMPLE
DATA
MODULES
RAZOR
CSS
using System;
using System.Collections.Generic;
publicclassEnergyRenewableConsumptionItem
{
publicstring Location { get; set; }
publicdouble Year { get; set; }
publicdouble Hydro { get; set; }
publicdouble Solar { get; set; }
publicdouble Wind { get; set; }
publicdouble Other { get; set; }
}
publicclassEnergyRenewableConsumption
: List<EnergyRenewableConsumptionItem>
{
publicEnergyRenewableConsumption()
{
this.Add(new EnergyRenewableConsumptionItem()
{
Location = @"China",
Year = 2019,
Hydro = 1269.5,
Solar = 223,
Wind = 405.2,
Other = 102.8
});
this.Add(new EnergyRenewableConsumptionItem()
{
Location = @"Europe",
Year = 2019,
Hydro = 632.54,
Solar = 154,
Wind = 461.3,
Other = 220.3
});
this.Add(new EnergyRenewableConsumptionItem()
{
Location = @"USA",
Year = 2019,
Hydro = 271.16,
Solar = 108,
Wind = 303.4,
Other = 78.34
});
this.Add(new EnergyRenewableConsumptionItem()
{
Location = @"Brazil",
Year = 2019,
Hydro = 399.3,
Solar = 5.5,
Wind = 55.83,
Other = 56.25
});
this.Add(new EnergyRenewableConsumptionItem()
{
Location = @"Canada",
Year = 2019,
Hydro = 381.98,
Solar = 4.3,
Wind = 34.17,
Other = 10.81
});
}
}cs
using System;
using System.Net.Http;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using IgniteUI.Blazor.Controls; // for registering Ignite UI modulesnamespaceInfragistics.Samples
{
publicclassProgram
{
publicstaticasync Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
// registering Ignite UI modules
builder.Services.AddIgniteUIBlazor(
typeof(IgbInputModule),
typeof(IgbPropertyEditorPanelModule),
typeof(IgbLegendModule),
typeof(IgbCategoryChartModule)
);
await builder.Build().RunAsync();
}
}
}cs
/*
CSS styles are loaded from the shared CSS file located at:
https://static.infragistics.com/xplatform/css/samples/
*/css
Configuración de la selección de contorno
Cuando FocusBrush se aplica, las series seleccionadas aparecerán con un borde cuando la SelectionMode propiedad se establezca en una de las opciones de enfoque.
Selección de series radiales
Este ejemplo muestra otro tipo de serie a través de la IgbDataChart donde cada serie radial se puede seleccionar con diferentes colores.
using System;
using System.Net.Http;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using IgniteUI.Blazor.Controls; // for registering Ignite UI modulesnamespaceInfragistics.Samples
{
publicclassProgram
{
publicstaticasync Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
// registering Ignite UI modules
builder.Services.AddIgniteUIBlazor(
typeof(IgbDataChartCoreModule),
typeof(IgbDataChartRadialModule),
typeof(IgbDataChartRadialCoreModule),
typeof(IgbDataChartInteractivityModule),
typeof(IgbDataChartAnnotationModule),
typeof(IgbLegendModule)
);
await builder.Build().RunAsync();
}
}
}cs
@using IgniteUI.Blazor.Controls<divclass="container vertical"><divclass="legend-title">
Ronaldo vs Messi Player Stats
</div><divclass="legend"><IgbLegendName="legend"
@ref="legend"Orientation="LegendOrientation.Horizontal"></IgbLegend></div><divclass="container vertical fill"><IgbDataChartName="chart"
@ref="chart"IsHorizontalZoomEnabled="false"IsVerticalZoomEnabled="false"SelectionMode="SeriesSelectionMode.SelectionColorFill"SelectionBehavior="SeriesSelectionBehavior.PerSeriesMultiSelect"><IgbCategoryAngleAxisName="angleAxis"
@ref="angleAxis"DataSource="FootballPlayerStats"Label="Attribute"></IgbCategoryAngleAxis><IgbNumericRadiusAxisName="radiusAxis"
@ref="radiusAxis"InnerRadiusExtentScale="0.1"Interval="2"MinimumValue="0"MaximumValue="10"></IgbNumericRadiusAxis><IgbRadialColumnSeriesName="RadialColumnSeries1"
@ref="radialColumnSeries1"DataSource="FootballPlayerStats"AngleAxisName="angleAxis"ValueAxisName="radiusAxis"ValueMemberPath="Ronaldo"ShowDefaultTooltip="false"AreaFillOpacity="0.8"Thickness="3"Title="Ronaldo"SelectionBrush="yellow"></IgbRadialColumnSeries><IgbRadialColumnSeriesName="RadialColumnSeries2"
@ref="radialColumnSeries2"DataSource="FootballPlayerStats"AngleAxisName="angleAxis"ValueAxisName="radiusAxis"ValueMemberPath="Messi"ShowDefaultTooltip="false"AreaFillOpacity="0.8"Thickness="3"Title="Messi"SelectionBrush="cyan"></IgbRadialColumnSeries></IgbDataChart></div></div>@code {private Action BindElements { get; set; }
protectedoverrideasync Task OnAfterRenderAsync(bool firstRender)
{
var legend = this.legend;
var chart = this.chart;
var angleAxis = this.angleAxis;
var radiusAxis = this.radiusAxis;
var radialColumnSeries1 = this.radialColumnSeries1;
var radialColumnSeries2 = this.radialColumnSeries2;
this.BindElements = () => {
chart.Legend = this.legend;
};
this.BindElements();
}
private IgbLegend legend;
private IgbDataChart chart;
private IgbCategoryAngleAxis angleAxis;
private IgbNumericRadiusAxis radiusAxis;
private IgbRadialColumnSeries radialColumnSeries1;
private IgbRadialColumnSeries radialColumnSeries2;
private FootballPlayerStats _footballPlayerStats = null;
public FootballPlayerStats FootballPlayerStats
{
get
{
if (_footballPlayerStats == null)
{
_footballPlayerStats = new FootballPlayerStats();
}
return _footballPlayerStats;
}
}
}razor
/*
CSS styles are loaded from the shared CSS file located at:
https://static.infragistics.com/xplatform/css/samples/
*/css
Selección programática
La selección de gráficos también se puede configurar en un código donde los elementos seleccionados en el gráfico se pueden ver al inicio o en tiempo de ejecución. Esto se puede lograr agregando elementos a la propiedad de la SelectedSeriesCollection IgbCategoryChart. La Matcher propiedad del IgbChartSelection objeto permite seleccionar una serie basada en un "matcher", ideal cuando no se tiene acceso a la serie real desde el gráfico. Si conoce las propiedades que contiene la fuente de datos, puede usar las ValueMemberPath que sería la serie.
El comparador es ideal para usar en gráficos, como el IgbCategoryChart cuando no tiene acceso a la serie real, como el IgbDataChart. En este caso, si conoce las propiedades que contenía el origen de datos, puede suponer los ValueMemberPaths que tendría la serie. Por ejemplo, si su fuente de datos tiene propiedades numéricas Nuclear, Carbón, Petróleo, Solar, entonces sabe que hay series creadas para cada una de estas propiedades. Si desea resaltar la serie enlazada a valores solares, puede agregar un objeto ChartSelection a la SelectedSeriesItems colección mediante un comparador con las siguientes propiedades establecidas
Por ejemplo, si su fuente de datos tiene propiedades numéricas Nuclear, Carbón, Petróleo, Solar, entonces sabe que hay series creadas para cada una de estas propiedades. Si desea seleccionar la serie enlazada a los valores solares, puede agregar un objeto ChartSelection a la colección SelectedSeriesItems mediante un comparador con las siguientes propiedades establecidas.
EXAMPLE
DATA
MODULES
RAZOR
CSS
using System;
using System.Collections.Generic;
publicclassEnergyRenewableConsumptionItem
{
publicstring Location { get; set; }
publicdouble Year { get; set; }
publicdouble Hydro { get; set; }
publicdouble Solar { get; set; }
publicdouble Wind { get; set; }
publicdouble Other { get; set; }
}
publicclassEnergyRenewableConsumption
: List<EnergyRenewableConsumptionItem>
{
publicEnergyRenewableConsumption()
{
this.Add(new EnergyRenewableConsumptionItem()
{
Location = @"China",
Year = 2019,
Hydro = 1269.5,
Solar = 223,
Wind = 405.2,
Other = 102.8
});
this.Add(new EnergyRenewableConsumptionItem()
{
Location = @"Europe",
Year = 2019,
Hydro = 632.54,
Solar = 154,
Wind = 461.3,
Other = 220.3
});
this.Add(new EnergyRenewableConsumptionItem()
{
Location = @"USA",
Year = 2019,
Hydro = 271.16,
Solar = 108,
Wind = 303.4,
Other = 78.34
});
this.Add(new EnergyRenewableConsumptionItem()
{
Location = @"Brazil",
Year = 2019,
Hydro = 399.3,
Solar = 5.5,
Wind = 55.83,
Other = 56.25
});
this.Add(new EnergyRenewableConsumptionItem()
{
Location = @"Canada",
Year = 2019,
Hydro = 381.98,
Solar = 4.3,
Wind = 34.17,
Other = 10.81
});
}
}cs
using System;
using System.Net.Http;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using IgniteUI.Blazor.Controls; // for registering Ignite UI modulesnamespaceInfragistics.Samples
{
publicclassProgram
{
publicstaticasync Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
// registering Ignite UI modules
builder.Services.AddIgniteUIBlazor(
typeof(IgbInputModule),
typeof(IgbLegendModule),
typeof(IgbCategoryChartModule),
typeof(IgbDataChartAnnotationModule),
typeof(IgbDataChartInteractivityModule),
typeof(IgbDataChartCoreModule)
);
await builder.Build().RunAsync();
}
}
}cs