我目前正在将旧的典型代码隐藏用户控件中的操纵杆用户控件重写为 MVPVM WinUI 3,并且在从演示者类引用 UIElement 时遇到问题。是的,我知道您不应该引用演示者的 UI。只需要有关如何重写它的帮助。 Presenter 类中的 ControlArea 是我遇到问题的地方。谁能告诉我如何重写这两行?
View UI代码是:
<Ellipse x:Name="ControlArea"
Height="{x:Bind p.ViewModel.OuterDiameter}"
Width="{x:Bind p.ViewModel.OuterDiameter}"
Fill="{x:Bind p.ViewModel.OuterFill}"
Stroke="{x:Bind p.ViewModel.OuterStroke}"/>
Presenter类方法是:
void OnPointerMoved(object sender, PointerRoutedEventArgs eventArgs)
{
if (!ViewModel.ControllerPressed) return;
Double x = eventArgs.GetCurrentPoint(ControlArea).Position.X - ViewModel.ControlRadius;
Double y = eventArgs.GetCurrentPoint(ControlArea).Position.Y - ViewModel.ControlRadius;
double disp = Math.Sqrt(x * x + y * y);
if (disp < ViewModel.ControlRadius)
{
ViewModel.JoystickTransform.X = ViewModel.XValue = x;
ViewModel.JoystickTransform.Y = ViewModel.YValue = y;
}
else
{
ViewModel.JoystickTransform.X = ViewModel.XValue = ViewModel.ControlRadius * (x / disp); //A*cos(x)
ViewModel.JoystickTransform.Y = ViewModel.YValue = ViewModel.ControlRadius * (y / disp); //A*sin(x)
}
ViewModel.OnJoyStickMoved?.Invoke(sender, new EventArgs());
}