Red de conocimiento informático - Problemas con los teléfonos móviles - control de selección de ángulo redondo wpf

control de selección de ángulo redondo wpf

AngleControl.xaml

seOver"?Value="True">

AngleControl.cspublic;partial;class;UserControl

{

public;static;readonly;DependencyProperty;AngleProperty;=;DependencyProperty.Register(

"Ángulo",;tipo de(doble),;tipo de(AngleControl),;nuevo?PropertyMetadata(0D));

¿evento?público?AngleChangedEventHandler?AngleChanged;

¿público? AngleControl()

{

InitializeComponent();

}

//?

//?Ángulo

//?

¿público?doble?Ángulo

{

obtener?{?return ?(doble)GetValue(AngleProperty);?

establecer?

{

valor?=?valor?%?360;

SetValue(AngleProperty,?value);

Transform(value);

}

}

¿privado?remitente,?MouseButtonEventArgs ?e)

{

var?point?=?e.GetPosition(alCtl);

Transformar(punto);

}

remitente?privado,Mous

eEventArgs?e)

{

if(e.LeftButton?==MouseButtonState.Pressed)

{

var?point? =e.GetPosition(alCtl);

Transformar(punto);

}

}

¿Privado?void?Transformar(Punto ?punto)

{

var?cenx?=?alCtl.ActualWidth?/?2;

var?ceny?=?alCtl.ActualHeight?/ ?2;

Ángulo?=?GetAngle(cenx, ceny, punto.X, punto.Y);

}

privado?Template.FindName( "Radio",?alCtl)?as?Line;

var?transformGroup?=?new?TransformGroup();

var?RotateTransform(angle);

transformGroup.Children.Add(transform);

radius.RenderTransform?=?transformGroup;

DispatchAngleChanged(ángulo);

}

privado?doble?GetAngle(doble?cenx,?doble?ceny,?doble?pox,?doble?poy)

{

/*?a?_____? c *|/ *|?/ *|?/ *|/ *b *?tan∠abc?=?ac?/?ab */

var?ac?=?pox?- ?cenx;

var?ab?=?ceny?-?poy;

if?(ab?==?0)

return?0;

var?rate?=?Math.Atan(ac?/?ab)?/?Math.PI?*?180;

rate?=?poy?<=? ceny cenx?

:?360?+?tasa

:?180?+?tasa;

tasa de retorno;

}

¿privado?void?DispatchAngleChanged(doble?ángulo)

{

si?(AngleChanged!=?null)

{

var?e? =?new?AngleChangedEventArgs(ángulo);

AngleChanged(este,?e);

}

}

}

}

¿público? delegado?void?AngleChangedEventHandler(objeto?remitente,?AngleChangedEventArgs??e);

público?EventArgs

{

público?AngleChangedEventArgs(doble?ángulo)

{

Ángulo?=?ángulo ;

}

¿público?doble?ángulo;

{

ge

t;

privado?set;

}

}

[ValueConversion(tipode(doble),?tipode(doble)) ]

¿clase pública?RadiusConverter:?MarkupExtension,?IValueConverter]

{

¿objeto público?Convert(objeto?valor,?Tipo?tipo de destino, ?objeto?parámetro,?System.Globalization.CultureInfo?cultura)

{

retorno?(doble)valor?/?ConvertBack(objeto?valor,?Tipo?targetType,? objeto?parámetro,?System.Globalization.CultureInfo?cultura)

{

Valor de retorno (doble)*?2;

}

public?RadiusConverter();

}

}

La propiedad "Ángulo" del control es el ángulo

" Evento AngleChanged" Puede usarse para capturar cambios

Si no está satisfecho con el color, puede usar xaml?>MainWindow.xaml

xmlns="

xmlns:x="

xmlns:local="clr-namespace :WpfApplication1"

Título="Ventana principal"?Altura ="200"?Width=" 200"?WindowStartupLocation="CenterScreen">

AngleChanged="angleControl_AngleChanged"/>

MainWindow.cspublic?MainWindow()

{

InitializeComponent()

}

privado?AngleChangedEventArgs?e)

>{

TxbAngle.Text?=?Math.Floor(e.Angle).ToString();

}

}

}

1-1