WPF使用DrawingContext實現(xiàn)繪制刻度條_第1頁
WPF使用DrawingContext實現(xiàn)繪制刻度條_第2頁
WPF使用DrawingContext實現(xiàn)繪制刻度條_第3頁
WPF使用DrawingContext實現(xiàn)繪制刻度條_第4頁
WPF使用DrawingContext實現(xiàn)繪制刻度條_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論