Нельзя использовать заполнители или индексы массивов в именах переменных, методов и т. Д.
Для UWP, кажется, существует вспомогательный метод FindChildByName
, который позволяет найти элемент управления по егоимя, через (TypeOfChildControl)insertParentControlHere.FindChildByName("<Name of child control>")
.
Я нахожу следующий код вашего недоумения:
gazeButtonControl1 = GazeInput.GetGazeElement(GazeBlock1);
gazeButtonControl1 = new GazeElement();
GazeInput.SetGazeElement(GazeBlock1, gazeButtonControl1);
По сути, сначала вы получаете gazeButtonControl1
из GazeBlock1
, а затем игнорировать его, чтобы создатьновый GazeElement
.Я предполагаю, что имеется в виду что-то вроде в этом примере UWP Gaze , где сначала проверяется, есть ли у элемента управления UI элемент взгляда, и если он не создан.Поэтому я думаю, что это должно быть:
gazeButtonControl1 = GazeInput.GetGazeElement(GazeBlock1);
if (gazeButtonControl1 == null)
{
gazeButtonControl1 = new GazeElement();
GazeInput.SetGazeElement(GazeBlock1, gazeButtonControl1);
}
Также, как я уже писал в своем первоначальном комментарии, вам, вероятно, нужен отдельный таймер для каждого элемента взгляда.
Так что в целом это должно быть примерно так(хотя и не проверено):
public class YourClass
{
private TimeSpan[] Word = new TimeSpan[300];
private Stopwatch[] Timer = new Stopwatch[300];
private GazeElement[] gazeButtonControl = new GazeElement[300];
public YourMethod(...)
{
for (int i = 0; i < 300; i++)
{
// first find gaze block where parentControl is the control containing your gaze blocks.
var gazeBlock = (UIElement)parentControl.FindChildByName("GazeBlock" + (i + 1));
gazeButtonControl[i] = GazeInput.GetGazeElement(gazeBlock);
if (gazeButtonControl[i] == null)
{
gazeButtonControl[i] = new GazeElement();
GazeInput.SetGazeElement(gazeBlock, gazeButtonControl[i]);
}
Word[i] = TimeSpan.Zero;
Timer[i] = new Stopwatch();
gazeButtonControl[i].StateChanged += GazeBlockControl_StateChanged;
}
}
private void GazeBlockControl_StateChanged(object sender, StateChangedEventArgs ea)
{
// get the GazeElement for which this event was raised
var changedControl = (GazeElement)sender;
// find its index in your list of GazeElements.
var i = Array.IndexOf(gazeButtonControl, changedControl);
if (ea.PointerState == PointerState.Enter)
{
Timer[i].Start();
}
if (ea.PointerState == PointerState.Exit)
{
Timer[i].Stop();
Word[i] += Timer.Elapsed;
File.WriteAllText(@"*insert path here", Word[i].ToString());
Timer[i].Reset();
}
}
}
Обратите внимание, что я использую Array.IndexOf
вместо gazeButtonControl.IndexOf
, потому что я объявил gazeButtonControl в качестве массива.Если бы это был список (например, List<GazeElement> gazeButtonControl
), вы бы использовали gazeButtonControl.IndexOf
.