private void ArtifactSetsComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (_artifactSetsComboBoxSelectionHandled)
        {
            if (!EquipmentHelper.CanArtifactSetsBeChanged())
            {
                AlertBox.Show("Artifact Sets cannot be changed while in combat or questing", MessageBoxButton.OK);

                var comboBox = sender as ComboBox;
                _artifactSetsComboBoxSelectionHandled = false;
                comboBox.SelectedItem = e.RemovedItems[0];

                return;
            }

            var artifactSetName = e.AddedItems[0]?.ToString();

            var artifactSetId = User.Instance.CurrentHero.ArtifactSets.FirstOrDefault(x => x.Name == artifactSetName).Id;

            EquipmentHelper.SwitchArtifactSet(artifactSetId);

            // Refresh the entire panel.
            RefreshWholeArtifactsPanel();
            ArtifactsScrollViewer.ScrollToTop();
        }

        _artifactSetsComboBoxSelectionHandled = true;
    }
    private void ItemBorder_TryToEquip(object sender, MouseButtonEventArgs e)
    {
        var item = (sender as Border)?.Tag;

        if (item is Artifact artifact)
        {
            var isEquipped = User.Instance.CurrentHero.EquippedArtifacts.Contains(artifact);
            var equippedArtifactsChanged = false;

            if (!isEquipped)
            {
                var canBeEquipped = artifact.ArtifactFunctionality.CanBeEquipped();

                if (canBeEquipped)
                {
                    User.Instance.CurrentHero.EquippedArtifacts.Add(artifact);
                    User.Instance.CurrentHero.ArtifactSets.FirstOrDefault(x => x.Id == User.Instance.CurrentHero.CurrentArtifactSetId)?.ArtifactIds.Add(artifact.Id);
                    artifact.ArtifactFunctionality.OnEquip();
                    (sender as Border).Background  = FindResource("BrushAccent3") as SolidColorBrush;
                    (sender as Border).BorderBrush = FindResource("BrushBlack") as SolidColorBrush;

                    equippedArtifactsChanged = true;
                }
            }
            else
            {
                // If the player clicked on the Equipped item border (in case they have 2 of this item and only 1 is equipped).
                if ((sender as Border).Name.StartsWith("Equipped"))
                {
                    var canBeUnequipped = artifact.ArtifactFunctionality.CanBeUnequipped();

                    if (canBeUnequipped)
                    {
                        User.Instance.CurrentHero.EquippedArtifacts.Remove(artifact);
                        User.Instance.CurrentHero.ArtifactSets.FirstOrDefault(x => x.Id == User.Instance.CurrentHero.CurrentArtifactSetId)?.ArtifactIds.Remove(artifact.Id);
                        artifact.ArtifactFunctionality.OnUnequip();
                        (sender as Border).Background  = FindResource("BrushAccent1") as SolidColorBrush;
                        (sender as Border).BorderBrush = FindResource("BrushBlack") as SolidColorBrush;

                        equippedArtifactsChanged = true;
                    }
                }
                else
                {
                    AlertBox.Show("You cannot equip two of the same artifacts!", MessageBoxButton.OK);
                }
            }

            // Refresh Artifacts tab.
            if (equippedArtifactsChanged)
            {
                RefreshWholeArtifactsPanel();

                InterfaceHelper.RefreshStatsAndEquipmentPanelsOnCurrentPage();
                ArtifactsScrollViewer.ScrollToTop();
            }
        }
    }
    private void ReloadScrollbarOffset()
    {
        if (_verticalOffset != 0)
        {
            switch (_selectedTabIndex)
            {
            case 0:
                MaterialsScrollViewer.ScrollToVerticalOffset(_verticalOffset);
                break;

            case 1:
                RecipesScrollViewer.ScrollToVerticalOffset(_verticalOffset);
                break;

            case 2:
                ArtifactsScrollViewer.ScrollToVerticalOffset(_verticalOffset);
                break;
            }

            _verticalOffset = 0;
        }
    }