private void PinOnPointerEntered(object sender, PointerRoutedEventArgs pointerRoutedEventArgs)
        {
            lock (_currentPinLock)
            {
                _currentPin = sender as Pin;
            }

            OnPropertyChanged(CurrentToolTipPropertyName);
        }
 private void PinOnPointerPressed(object sender, PointerRoutedEventArgs pointerRoutedEventArgs)
 {
     _pressedPin = sender as Pin;
 }
        private void PinOnPointerExited(object sender, PointerRoutedEventArgs pointerRoutedEventArgs)
        {
            Pin senderPin = sender as Pin;
            bool change = false;

            lock (_currentPinLock)
            {
                if (_currentPin == senderPin)
                {
                    change = true;
                    _currentPin = null;
                }
            }

            if (change)
                OnPropertyChanged(CurrentToolTipPropertyName);


        }
        private void PinOnPointerReleased(object sender, PointerRoutedEventArgs pointerRoutedEventArgs)
        {
            Pin releasedPin = sender as Pin;
            if (_pressedPin != releasedPin || _pressedPin?.GpioPin == null) return;

            using (GpioPin gpioPin = _gpioController.OpenPin(_pressedPin.GpioPin.PinNumber))
            {
                GpioPinValue currentValue = gpioPin.Read();
                gpioPin.Write(currentValue == GpioPinValue.High ? GpioPinValue.Low : GpioPinValue.High);
            }

            _pressedPin = null;
        }