Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
L
livecharts
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
潘栩锋
livecharts
Commits
ed182e01
Commit
ed182e01
authored
Aug 01, 2019
by
潘栩锋
🚴
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
测试
parent
32c09b3f
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
314 additions
and
56 deletions
+314
-56
App.config
WpfApp1/App.config
+3
-3
App.xaml
WpfApp1/App.xaml
+1
-1
ColumnRangeExample.xaml
WpfApp1/ColumnRangeExample.xaml
+37
-0
ColumnRangeExample.xaml.cs
WpfApp1/ColumnRangeExample.xaml.cs
+222
-0
Resources.Designer.cs
WpfApp1/Properties/Resources.Designer.cs
+26
-34
Settings.Designer.cs
WpfApp1/Properties/Settings.Designer.cs
+13
-17
WpfApp1.csproj
WpfApp1/WpfApp1.csproj
+12
-1
No files found.
WpfApp1/App.config
View file @
ed182e01
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
configuration
>
<
startup
>
<
supportedRuntime
version
=
"v4.0"
sku
=
".NETFramework,Version=v4.6.
2"
/>
<
supportedRuntime
version
=
"v4.0"
sku
=
".NETFramework,Version=v4.6.
1"
/>
</
startup
>
</
configuration
>
\ No newline at end of file
</
configuration
>
WpfApp1/App.xaml
View file @
ed182e01
...
...
@@ -2,7 +2,7 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
StartupUri="
MainWindow
.xaml">
StartupUri="
ColumnRangeExample
.xaml">
<Application.Resources>
</Application.Resources>
...
...
WpfApp1/ColumnRangeExample.xaml
0 → 100644
View file @
ed182e01
<Window x:Class="WpfApp1.ColumnRangeExample"
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:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid >
<lvc:CartesianChart x:Name="chart" Series="{Binding SeriesCollection}" LegendLocation="Left"
DisableAnimations="True" Hoverable="False" DataTooltip="{x:Null}">
<lvc:CartesianChart.AxisX>
<lvc:Axis MinValue="{Binding XMin}" MaxValue="{Binding XMax}"></lvc:Axis>
</lvc:CartesianChart.AxisX>
<lvc:CartesianChart.AxisY>
<lvc:Axis Title="Sold Apps" LabelFormatter="{Binding Formatter}"></lvc:Axis>
</lvc:CartesianChart.AxisY>
</lvc:CartesianChart>
<StackPanel Orientation="Vertical" HorizontalAlignment="Left" Background="#08000000" VerticalAlignment="Top">
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="XMin"/>
<TextBox Text="{Binding XMin}"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="XMax"/>
<TextBox Text="{Binding XMax}"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="运行中"/>
<TextBlock Text="{Binding IsRunning,Mode=OneWay}"/>
</StackPanel>
<Button Content="Update" Width="80" Padding="5" Click="Button_Click"/>
</StackPanel>
</Grid>
</Window>
\ No newline at end of file
WpfApp1/ColumnRangeExample.xaml.cs
0 → 100644
View file @
ed182e01
using
LiveCharts
;
using
LiveCharts.Configurations
;
using
LiveCharts.Defaults
;
using
LiveCharts.Wpf
;
using
System
;
using
System.Collections.Generic
;
using
System.ComponentModel
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
System.Windows
;
using
System.Windows.Controls
;
using
System.Windows.Data
;
using
System.Windows.Documents
;
using
System.Windows.Input
;
using
System.Windows.Media
;
using
System.Windows.Media.Imaging
;
using
System.Windows.Shapes
;
using
System.Windows.Threading
;
namespace
WpfApp1
{
/// <summary>
/// Window1.xaml 的交互逻辑
/// </summary>
public
partial
class
ColumnRangeExample
:
Window
{
ColumnRangeExampleViewModel
viewModel
;
public
ColumnRangeExample
()
{
InitializeComponent
();
viewModel
=
new
ColumnRangeExampleViewModel
();
viewModel
.
Init
();
this
.
DataContext
=
viewModel
;
}
private
void
Button_Click
(
object
sender
,
RoutedEventArgs
e
)
{
if
(
viewModel
.
IsRunning
)
viewModel
.
Stop
();
else
viewModel
.
Start
();
}
}
public
class
ColumnRangeExampleViewModel
:
INotifyPropertyChanged
{
DispatcherTimer
timer
;
public
SeriesCollection
SeriesCollection
{
get
;
set
;
}
public
Func
<
double
,
string
>
Formatter
{
get
;
set
;
}
public
double
XMin
{
get
;
set
;
}
=
double
.
NaN
;
public
double
XMax
{
get
;
set
;
}
=
double
.
NaN
;
public
bool
IsRunning
{
get
;
private
set
;
}
List
<
double
>
datas
=
new
List
<
double
>();
List
<
Bolt
>
boltmap
=
new
List
<
Bolt
>();
ChartValues
<
BoltValue
>
BoltValues
=
new
ChartValues
<
BoltValue
>();
ChartValues
<
double
>
Values
=
new
ChartValues
<
double
>();
public
void
Update
()
{
Random
random
=
new
Random
();
double
[]
datas2
=
new
double
[
datas
.
Count
()];
for
(
int
i
=
0
;
i
<
datas
.
Count
();
i
++)
{
datas2
[
i
]
=
datas
[
i
]
+
(
random
.
NextDouble
()
-
0.5
)
*
1
;
}
//把其中一部分数据变为无效
int
null_value_pos
=
random
.
Next
(
1000
);
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
int
index
=
null_value_pos
-
50
+
i
;
if
(
index
<
0
)
index
+=
datas2
.
Count
();
else
if
(
index
>=
datas2
.
Count
())
index
-=
datas2
.
Count
();
datas2
[
index
]
=
double
.
NaN
;
}
//-----------------------------------------------------------
//转显示数据
List
<
BoltValue
>
boltValues
=
new
List
<
BoltValue
>();
foreach
(
Bolt
bolt
in
boltmap
)
{
IEnumerable
<
double
>
a
=
datas2
.
Skip
(
bolt
.
Begin
-
1
).
Take
(
bolt
.
End
-
bolt
.
Begin
+
1
);
a
=
from
d
in
a
where
!
double
.
IsNaN
(
d
)
select
d
;
double
v
;
if
(
a
.
Count
()
>
0
)
v
=
a
.
Average
();
else
v
=
double
.
NaN
;
boltValues
.
Add
(
new
BoltValue
(
bolt
.
Begin
,
bolt
.
End
,
v
));
}
BoltValues
.
Clear
();
Values
.
Clear
();
BoltValues
.
AddRange
(
boltValues
);
Values
.
AddRange
(
datas2
);
}
public
void
Init
()
{
//-----------------------------------------------------------
//模拟数据
double
target
=
150
;
double
tolerance
=
2
;
Random
random
=
new
Random
();
for
(
int
i
=
0
;
i
<
1000
;
i
++)
{
double
d
=
Math
.
Sin
(
Math
.
PI
*
2
*
i
/
350
)
*
tolerance
+
(
random
.
NextDouble
()
-
0.5
)
*
0.3
+
target
;
datas
.
Add
(
d
);
}
//平均分为8份
double
width
=
datas
.
Count
()
/
23
;
int
begin
=
0
;
while
(
true
)
{
int
end
=
(
int
)(
begin
+
width
);
if
(
end
>=
datas
.
Count
())
end
=
datas
.
Count
()
-
1
;
boltmap
.
Add
(
new
Bolt
(
begin
,
end
));
if
(
end
==
datas
.
Count
()-
1
)
break
;
begin
=
end
;
}
boltmap
[
2
].
End
=
(
boltmap
[
3
].
End
+
boltmap
[
3
].
Begin
)
/
2
;
SeriesCollection
=
new
SeriesCollection
{
new
LineSeries
{
Title
=
"Line"
,
Values
=
Values
,
StrokeThickness
=
2
,
Stroke
=
new
SolidColorBrush
(
System
.
Windows
.
Media
.
Colors
.
Blue
),
Fill
=
new
SolidColorBrush
(
System
.
Windows
.
Media
.
Colors
.
Transparent
),
PointGeometry
=
null
,
},
new
ColumnRangeSeries
{
Title
=
"ColumnRange"
,
Values
=
BoltValues
,
StrokeThickness
=
2
,
Stroke
=
new
SolidColorBrush
(
System
.
Windows
.
Media
.
Colors
.
DarkRed
),
Fill
=
new
SolidColorBrush
(
System
.
Windows
.
Media
.
Color
.
FromArgb
(
0x80
,
0xff
,
0
,
0
)),
DataLabels
=
true
,
YAxisCrossing
=
150
,
Configuration
=
Mappers
.
Weighted
<
BoltValue
>()
.
X
(
b
=>(
b
.
From
+
b
.
To
)/
2
)
.
Weight
(
b
=>
Math
.
Abs
(
b
.
From
-
b
.
To
))
.
Y
(
b
=>
b
.
Value
)
}
};
Formatter
=
value
=>
value
.
ToString
(
"N"
);
XMin
=
100
;
XMax
=
900
;
//-----------------------------------------------------------
//转显示数据
Update
();
timer
=
new
DispatcherTimer
();
timer
.
Interval
=
TimeSpan
.
FromSeconds
(
1
);
timer
.
Tick
+=
Timer_Tick
;
}
public
void
Start
()
{
IsRunning
=
true
;
timer
.
Start
();
}
public
void
Stop
()
{
IsRunning
=
false
;
timer
.
Stop
();
}
private
void
Timer_Tick
(
object
sender
,
EventArgs
e
)
{
Update
();
}
public
event
PropertyChangedEventHandler
PropertyChanged
;
}
public
class
BoltValue
:
INotifyPropertyChanged
{
public
event
PropertyChangedEventHandler
PropertyChanged
;
public
double
Value
{
get
;
set
;
}
public
double
From
{
get
;
set
;
}
public
double
To
{
get
;
set
;
}
public
BoltValue
()
{
}
public
BoltValue
(
double
from
,
double
to
,
double
value
)
{
From
=
from
;
To
=
to
;
Value
=
value
;
}
}
public
class
Bolt
{
public
int
Begin
;
public
int
End
;
public
Bolt
(
int
b
,
int
e
)
{
Begin
=
b
;
End
=
e
;
}
}
}
WpfApp1/Properties/Resources.Designer.cs
View file @
ed182e01
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:
4.0.30319.42000
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能
导致不正确的行为,
如果
// 重新生成代码,
则所做更改将
丢失。
// 对此文件的更改可能
会导致不正确的行为,并且
如果
// 重新生成代码,
这些更改将会
丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace
WpfApp1.Properties
{
namespace
WpfApp1.Properties
{
using
System
;
/// <summary>
///
强类型资源类,用于查找本地化
字符串等。
///
一个强类型的资源类,用于查找本地化的
字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或
删
除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// 若要添加或
移
除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[
global
::
System
.
CodeDom
.
Compiler
.
GeneratedCodeAttribute
(
"System.Resources.Tools.StronglyTypedResourceBuilder"
,
"
4
.0.0.0"
)]
[
global
::
System
.
CodeDom
.
Compiler
.
GeneratedCodeAttribute
(
"System.Resources.Tools.StronglyTypedResourceBuilder"
,
"
15
.0.0.0"
)]
[
global
::
System
.
Diagnostics
.
DebuggerNonUserCodeAttribute
()]
[
global
::
System
.
Runtime
.
CompilerServices
.
CompilerGeneratedAttribute
()]
internal
class
Resources
{
internal
class
Resources
{
private
static
global
::
System
.
Resources
.
ResourceManager
resourceMan
;
private
static
global
::
System
.
Globalization
.
CultureInfo
resourceCulture
;
[
global
::
System
.
Diagnostics
.
CodeAnalysis
.
SuppressMessageAttribute
(
"Microsoft.Performance"
,
"CA1811:AvoidUncalledPrivateCode"
)]
internal
Resources
()
{
internal
Resources
()
{
}
/// <summary>
/// 返回此类使用的缓存 ResourceManager 实例。
/// 返回此类使用的缓存
的
ResourceManager 实例。
/// </summary>
[
global
::
System
.
ComponentModel
.
EditorBrowsableAttribute
(
global
::
System
.
ComponentModel
.
EditorBrowsableState
.
Advanced
)]
internal
static
global
::
System
.
Resources
.
ResourceManager
ResourceManager
{
get
{
if
((
resourceMan
==
null
))
{
internal
static
global
::
System
.
Resources
.
ResourceManager
ResourceManager
{
get
{
if
(
object
.
ReferenceEquals
(
resourceMan
,
null
))
{
global
::
System
.
Resources
.
ResourceManager
temp
=
new
global
::
System
.
Resources
.
ResourceManager
(
"WpfApp1.Properties.Resources"
,
typeof
(
Resources
).
Assembly
);
resourceMan
=
temp
;
}
return
resourceMan
;
}
}
/// <summary>
///
覆盖
当前线程的 CurrentUICulture 属性
///
使用此强类型的资源类的资源查找
。
///
重写
当前线程的 CurrentUICulture 属性
///
重写当前线程的 CurrentUICulture 属性
。
/// </summary>
[
global
::
System
.
ComponentModel
.
EditorBrowsableAttribute
(
global
::
System
.
ComponentModel
.
EditorBrowsableState
.
Advanced
)]
internal
static
global
::
System
.
Globalization
.
CultureInfo
Culture
{
get
{
internal
static
global
::
System
.
Globalization
.
CultureInfo
Culture
{
get
{
return
resourceCulture
;
}
set
{
set
{
resourceCulture
=
value
;
}
}
...
...
WpfApp1/Properties/Settings.Designer.cs
View file @
ed182e01
//------------------------------------------------------------------------------
// <auto-generated>
//
This code was generated by a tool.
//
Runtime Version
:4.0.30319.42000
//
此代码由工具生成。
//
运行时版本
:4.0.30319.42000
//
//
Changes to this file may cause incorrect behavior and will be lost if
//
the code is regenerated.
//
对此文件的更改可能会导致不正确的行为,并且如果
//
重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace
WpfApp1.Properties
{
namespace
WpfApp1.Properties
{
[
global
::
System
.
Runtime
.
CompilerServices
.
CompilerGeneratedAttribute
()]
[
global
::
System
.
CodeDom
.
Compiler
.
GeneratedCodeAttribute
(
"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator"
,
"11.0.0.0"
)]
internal
sealed
partial
class
Settings
:
global
::
System
.
Configuration
.
ApplicationSettingsBase
{
[
global
::
System
.
CodeDom
.
Compiler
.
GeneratedCodeAttribute
(
"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator"
,
"15.9.0.0"
)]
internal
sealed
partial
class
Settings
:
global
::
System
.
Configuration
.
ApplicationSettingsBase
{
private
static
Settings
defaultInstance
=
((
Settings
)(
global
::
System
.
Configuration
.
ApplicationSettingsBase
.
Synchronized
(
new
Settings
())));
public
static
Settings
Default
{
get
{
public
static
Settings
Default
{
get
{
return
defaultInstance
;
}
}
...
...
WpfApp1/WpfApp1.csproj
View file @
ed182e01
...
...
@@ -9,7 +9,7 @@
<OutputType>
WinExe
</OutputType>
<RootNamespace>
WpfApp1
</RootNamespace>
<AssemblyName>
WpfApp1
</AssemblyName>
<TargetFrameworkVersion>
v4.6.
2
</TargetFrameworkVersion>
<TargetFrameworkVersion>
v4.6.
1
</TargetFrameworkVersion>
<FileAlignment>
512
</FileAlignment>
<ProjectTypeGuids>
{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
</ProjectTypeGuids>
<WarningLevel>
4
</WarningLevel>
...
...
@@ -17,6 +17,7 @@
<Deterministic>
true
</Deterministic>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<TargetFrameworkProfile
/>
</PropertyGroup>
<PropertyGroup
Condition=
" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "
>
<PlatformTarget>
AnyCPU
</PlatformTarget>
...
...
@@ -61,6 +62,9 @@
<Generator>
MSBuild:Compile
</Generator>
<SubType>
Designer
</SubType>
</ApplicationDefinition>
<Compile
Include=
"ColumnRangeExample.xaml.cs"
>
<DependentUpon>
ColumnRangeExample.xaml
</DependentUpon>
</Compile>
<Page
Include=
"MainWindow.xaml"
>
<Generator>
MSBuild:Compile
</Generator>
<SubType>
Designer
</SubType>
...
...
@@ -73,6 +77,10 @@
<DependentUpon>
MainWindow.xaml
</DependentUpon>
<SubType>
Code
</SubType>
</Compile>
<Page
Include=
"ColumnRangeExample.xaml"
>
<SubType>
Designer
</SubType>
<Generator>
MSBuild:Compile
</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Compile
Include=
"Properties\AssemblyInfo.cs"
>
...
...
@@ -119,6 +127,9 @@
<Name>
WpfView
</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Resource
Include=
"FodyWeavers.xml"
/>
</ItemGroup>
<Import
Project=
"$(MSBuildToolsPath)\Microsoft.CSharp.targets"
/>
<Import
Project=
"..\packages\Fody.3.3.2\build\Fody.targets"
Condition=
"Exists('..\packages\Fody.3.3.2\build\Fody.targets')"
/>
<Target
Name=
"EnsureNuGetPackageBuildImports"
BeforeTargets=
"PrepareForBuild"
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment