@inject IJSRuntime JSRuntime
@implements IDisposable
1
2
3
4
@code {
private ElementReference Node1Ref;
private ElementReference Node2Ref;
private ElementReference Node3Ref;
private ElementReference Node4Ref;
private DotNetObjectReference DotNetObj = null!;
private double X1;
private double Y1;
private double X2;
private double Y2;
private double X3;
private double Y3;
private double X4;
private double Y4;
private ZoneModel? Model;
private string Visibility = "hidden";
protected override async Task OnAfterRenderAsync(bool firstRender)
{
await base.OnAfterRenderAsync(firstRender);
if (!firstRender) return;
DotNetObj = DotNetObjectReference.Create(this);
await JSRuntime.InvokeVoidAsync("AddMouseDownEventListener", DotNetObj, Node1Ref, nameof(OnMouseDownNode1), false);
await JSRuntime.InvokeVoidAsync("AddMouseDownEventListener", DotNetObj, Node2Ref, nameof(OnMouseDownNode2), false);
await JSRuntime.InvokeVoidAsync("AddMouseDownEventListener", DotNetObj, Node3Ref, nameof(OnMouseDownNode3), false);
await JSRuntime.InvokeVoidAsync("AddMouseDownEventListener", DotNetObj, Node4Ref, nameof(OnMouseDownNode4), false);
}
public void SetControl(ZoneModel? model)
{
if (Model != null)
{
Model.ControlNodePosittionChanged -= CaculateZoneAsync;
}
Model = model;
if (Model != null)
{
Visibility = "visible";
CaculateZone();
Model.ControlNodePosittionChanged += CaculateZoneAsync;
Visibility = "visible";
}
else
{
Visibility = "hidden";
}
StateHasChanged();
}
private Task CaculateZoneAsync()
{
CaculateZone();
return Task.CompletedTask;
}
private void CaculateZone()
{
if (Model == null) return;
X1 = Model.X1;
Y1 = Model.Y1;
X2 = Model.X2;
Y2 = Model.Y2;
X3 = Model.X3;
Y3 = Model.Y3;
X4 = Model.X4;
Y4 = Model.Y4;
StateHasChanged();
}
[JSInvokable]
public void OnMouseDownNode1(int button, bool altKey, bool ctrlKey, bool shiftKey)
{
if (Model != null)
{
Model.ActiveNode = 1;
}
}
[JSInvokable]
public void OnMouseDownNode2(int button, bool altKey, bool ctrlKey, bool shiftKey)
{
if (Model != null)
{
Model.ActiveNode = 2;
}
}
[JSInvokable]
public void OnMouseDownNode3(int button, bool altKey, bool ctrlKey, bool shiftKey)
{
if (Model != null)
{
Model.ActiveNode = 3;
}
}
[JSInvokable]
public void OnMouseDownNode4(int button, bool altKey, bool ctrlKey, bool shiftKey)
{
if (Model != null)
{
Model.ActiveNode = 4;
}
}
public void Dispose()
{
if (Model != null)
{
Model.ControlNodePosittionChanged -= CaculateZoneAsync;
Model = null;
}
if (DotNetObj is not null) DotNetObj.Dispose();
GC.SuppressFinalize(this);
}
}