版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第WPF使用DrawingContext實現(xiàn)繪制刻度條public
static
readonly
DependencyProperty
MiddleMaskProperty
=
DependencyProperty.Register("MiddleMask",
typeof(int),
typeof(Ruler),
new
UIPropertyMetadata(2));
public
static
readonly
DependencyProperty
CurrentValueProperty
=
DependencyProperty.Register("CurrentValue",
typeof(double),
typeof(Ruler),
new
UIPropertyMetadata(OnCurrentValueChanged));
public
static
readonly
DependencyProperty
StartValueProperty
=
DependencyProperty.Register("StartValue",
typeof(double),
typeof(Ruler),
new
UIPropertyMetadata(120.0));
public
static
readonly
DependencyProperty
EndValueProperty
=
DependencyProperty.Register("EndValue",
typeof(double),
typeof(Ruler),
new
UIPropertyMetadata(240.0));
public
static
readonly
DependencyProperty
CurrentGeometryProperty
=
DependencyProperty.Register("CurrentGeometry",
typeof(Geometry),
typeof(Ruler),
new
PropertyMetadata(Geometry.Parse("M
257,0
257,25
264,49
250,49
257,25")));
static
Ruler()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(Ruler),
new
FrameworkPropertyMetadata(typeof(Ruler)));
}
public
Ruler()
{
Loaded
+=
Ruler_Loaded;
}
public
double
Interval
{
get
=
(double)GetValue(IntervalProperty);
set
=
SetValue(IntervalProperty,
value);
}
public
double
SpanInterval
{
get
=
(double)GetValue(SpanIntervalProperty);
set
=
SetValue(SpanIntervalProperty,
value);
}
public
int
MiddleMask
{
get
=
(int)GetValue(MiddleMaskProperty);
set
=
SetValue(MiddleMaskProperty,
value);
}
public
double
CurrentValue
{
get
=
(double)GetValue(CurrentValueProperty);
set
{
SetValue(CurrentValueProperty,
value);
PaintPath();
}
}
public
double
StartValue
{
get
=
(double)GetValue(StartValueProperty);
set
=
SetValue(StartValueProperty,
value);
}
public
double
EndValue
{
get
=
(double)GetValue(EndValueProperty);
set
=
SetValue(EndValueProperty,
value);
}
public
Geometry
CurrentGeometry
{
get
=
(Geometry)GetValue(CurrentGeometryProperty);
set
=
SetValue(CurrentGeometryProperty,
value);
}
private
static
void
OnCurrentValueChanged(DependencyObject
d,
DependencyPropertyChangedEventArgs
e)
{
var
ruler
=
d
as
Ruler;
ruler.CurrentValue
=
Convert.ToDouble(e.NewValue);
}
protected
override
void
OnRender(DrawingContext
drawingContext)
{
RenderOptions.SetEdgeMode(this,
EdgeMode.Aliased);
var
nextLineValue
=
0d;
var
one_Width
=
ActualWidth
/
((EndValue
-
StartValue)
/
Interval);
for
(var
i
=
0;
i
=
(EndValue
-
StartValue)
/
Interval;
i++)
{
var
numberText
=
DrawingContextHelper.GetFormattedText((StartValue
+
i
*
Interval).ToString(),
(Brush)DrawingContextHelper.BrushConverter.ConvertFromString("#FFFFFF"),
FlowDirection.LeftToRight,
10);
drawingContext.DrawText(numberText,
new
Point(i
*
one_Width
-
8,
0));
drawingContext.DrawLine(new
Pen(new
SolidColorBrush(Colors.White),
1),
new
Point(i
*
one_Width,
25),
new
Point(i
*
one_Width,
ActualHeight
-
2));
var
cnt
=
Interval
/
SpanInterval;
for
(var
j
=
1;
j
=
cnt;
j++)
if
(j
%
MiddleMask
==
0)
drawingContext.DrawLine(new
Pen(new
SolidColorBrush(Colors.White),
1),
new
Point(j
*
(one_Width
/
cnt)
+
nextLineValue,
ActualHeight
-
2),
new
Point(j
*
(one_Width
/
cnt)
+
nextLineValue,
ActualHeight
-
10));
else
drawingContext.DrawLine(new
Pen(new
SolidColorBrush(Colors.White),
1),
new
Point(j
*
(one_Width
/
cnt)
+
nextLineValue,
ActualHeight
-
2),
new
Point(j
*
(one_Width
/
cnt)
+
nextLineValue,
ActualHeight
-
5));
nextLineValue
=
i
*
one_Width;
}
}
private
void
Ruler_Loaded(object
sender,
RoutedEventArgs
e)
{
PaintPath();
}
private
void
PaintPath()
{
var
d_Value
=
CurrentValue
-
StartValue;
var
one_Value
=
ActualWidth
/
(EndValue
-
StartValue);
var
x_Point
=
one_Value
*
d_Value
+
((double)Parent.GetValue(ActualWidthProperty)
-
ActualWidth)
/
2d;
CurrentGeometry
=
Geometry.Parse($"M
{x_Point},0
{x_Point},25
{x_Point
+
7},49
{x_Point
-
7},49
{x_Point},25");
}
}
2)使用RulerControlExample.xaml.cs如下:
UserControl
x:
xmlns="/winfx/2006/xaml/presentation"
xmlns:x="/winfx/2006/xaml"
xmlns:mc="/markup-compatibility/2006"
xmlns:d="/expression/blend/2008"
xmlns:local="clr-namespace:WPFDevelopers.Samples.ExampleViews"
xmlns:wpfdev="/WPFDevelopersOrg/WPFDevelopers"
mc:Ignorable="d"
d:DesignHeight="450"
d:DesignWidth="800"
Grid
Slider
x:Name="PART_Slider"
IsSnapToTickEnabled="True"
Value="40"
Minimum="10"
Maximum="210"/
UniformGrid
Rows="3"
Grid
Background="{StaticResource
CircularDualSolidColorBrush}"
Height="51"
Margin="40,0"
Path
Stroke="{StaticResource
SuccessPressedSolidColorBrush}"
StrokeThickness="1"
Fill="{StaticResource
SuccessPressedSolidColorBrush}"
Data="{Binding
ElementName=PART_Ruler,
Path=CurrentGeometry,Mode=TwoWay}"
/
wpfdev:Ruler
x:Name="PART_Ruler"
Margin="40,0"
Interval="20"
StartValue="10"
EndValue="210"
CurrentValue="{Binding
ElementName=PART_Slider,Path=Value,Mode=TwoWay}"/
/Grid
Grid
Background="{StaticResource
DangerPressedSolidColorBrush}"
Height="51"
Margin="40,0"
Path
Stroke="{StaticResource
SuccessPressedSolidColorBrush}"
StrokeThickness="1"
Fill="{StaticResource
SuccessPressedSolidColorBrush}"
Data="{Binding
ElementName=PART_Ruler1,
Path=CurrentGeometry,Mode=TwoWay}"
/
wpfdev:Ruler
x:Name="PART_Ruler1"
Margin="40,0"
Interval="20"
StartValue="10"
EndValue="210"
CurrentValue="{Binding
ElementName=PART_Slider,Path=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026重慶市涪陵區(qū)武陵山鎮(zhèn)人民政府招聘公益性崗位1人參考考試題庫附答案解析
- 2025年湖口縣應(yīng)急管理局面向社會公開招聘工作人員參考考試試題附答案解析
- 2026河北雄安人才服務(wù)有限公司招聘53人備考考試試題附答案解析
- 2026上海交通大學(xué)醫(yī)學(xué)院招聘91人參考考試題庫附答案解析
- 2026浙江自然博物院(安吉館)招聘編外人員1人參考考試題庫附答案解析
- 2026山東濰坊瀚聲學(xué)校招聘生活老師備考考試試題附答案解析
- 2026年度威海榮成市事業(yè)單位公開招聘初級綜合類崗位人員(84人)備考考試試題附答案解析
- 保密常識保密涉密載體管理最佳實踐題庫及答案
- 酒店人事部員工培訓(xùn)管理制度
- 2025年四川省公務(wù)員申論模擬考試沖刺試卷(含答案)
- 年產(chǎn)30萬噸木薯燃料乙醇項目一期工程(年產(chǎn)15萬噸)可行性研究報告
- 2024年水合肼行業(yè)發(fā)展現(xiàn)狀分析:水合肼市場需求量約為11.47萬噸
- 肺炎性假瘤誤診為肺癌的HRCT表現(xiàn)及淺析
- (正式版)JBT 14933-2024 機械式停車設(shè)備 檢驗與試驗規(guī)范
- 幼兒園勞動教育計劃及實施
- 新人教版五年級小學(xué)數(shù)學(xué)全冊奧數(shù)(含答案)
- 志愿服務(wù)證明(多模板)
- 術(shù)后腸麻痹學(xué)習(xí)課件
- 頂管施工方案非開挖電纜管道專項施工方案
- XX小學(xué)傳統(tǒng)體育游戲集錦
- GB/T 33091-2016聚氨酯篩板
評論
0/150
提交評論