internal static IEnumerable <string> GetValidVisualStatesListViewBaseItem(ListViewBaseItemVisualStatesCriteria criteria) { int index = 0; //int expectedVisualStatesSize = 6; int expectedVisualStatesSize = 2; // See Uno TODO below var validVisualStates = new string[expectedVisualStatesSize]; // Uno TODO: use this method for all visual states. For now it's only used for dragging states. // Focus States if (FocusState.Unfocused != criteria.focusState && criteria.isEnabled) { if (FocusState.Pointer == criteria.focusState) { validVisualStates[index] = "PointerFocused"; } else { validVisualStates[index] = "Focused"; } } else { validVisualStates[index] = "Unfocused"; } ++index; //// Multi-Select States //if (criteria.isMultiSelect) //{ // validVisualStates[index] = "MultiSelectEnabled"; //} //else //{ // validVisualStates[index] = "MultiSelectDisabled"; //} //++index; //// Enabled and Selection States //if (criteria.isEnabled) //{ // validVisualStates[index++] = "Enabled"; // if (criteria.isDraggedOver) // { // if (criteria.isSelected) // { // validVisualStates[index] = "PointerOverSelected"; // } // else // { // validVisualStates[index] = "PointerOver"; // } // } // else if (criteria.isSelected) // { // if (criteria.isPressed) // { // validVisualStates[index] = "PressedSelected"; // } // else if (criteria.isPointerOver) // { // validVisualStates[index] = "PointerOverSelected"; // } // else // { // if (criteria.isDragging && criteria.isItemDragPrimary && !criteria.isDragVisualCaptured) // { // // Retain press till drag visual is captured // validVisualStates[index] = "PressedSelected"; // } // else // { // validVisualStates[index] = "Selected"; // } // } // } // else if (criteria.isPointerOver) // { // if (criteria.isPressed) // { // validVisualStates[index] = "Pressed"; // } // else // { // validVisualStates[index] = "PointerOver"; // } // } // else if (criteria.isPressed) // { // validVisualStates[index] = "Pressed"; // } // else // { // if (criteria.isDragging && criteria.isItemDragPrimary && !criteria.isDragVisualCaptured) // { // // Retain press till drag visual is captured // validVisualStates[index] = "Pressed"; // } // else // { // validVisualStates[index] = "Normal"; // } // } //} //else //{ // validVisualStates[index++] = "Disabled"; // if (criteria.isSelected) // { // validVisualStates[index] = "Selected"; // } // else // { // validVisualStates[index] = "Normal"; // } //} //++index; //validVisualStates[index] = "NoReorderHint"; //++index; // Drag & Reorder States if ((criteria.isDragging || criteria.isHolding) && criteria.isInsideListView) { // to go into the DragOver state, an item must be DraggedOver, enabled, not selected and not the primary dragged item // selected items should go into MultipleDraggingSecondary // primary dragged items should go to DraggedPlaceholder state for the duration of the drag if (criteria.isDraggedOver && criteria.isEnabled && !criteria.isItemDragPrimary && !criteria.isSelected) { validVisualStates[index] = "DragOver"; } else if (criteria.dragItemsCount > 1) { if (criteria.isItemDragPrimary) { if (criteria.isDragVisualCaptured) { if (criteria.canReorder) { validVisualStates[index] = "ReorderedPlaceholder"; } else { validVisualStates[index] = "DraggedPlaceholder"; } } else { if (criteria.canReorder) { validVisualStates[index] = "MultipleReorderingPrimary"; } else { validVisualStates[index] = "MultipleDraggingPrimary"; } } } else { if (criteria.isSelected) { if (criteria.canReorder) { validVisualStates[index] = "ReorderingTarget"; } else { validVisualStates[index] = "MultipleDraggingSecondary"; } } else { if (criteria.canReorder) { validVisualStates[index] = "ReorderingTarget"; } else { validVisualStates[index] = "DraggingTarget"; } } } } else { // Single drag if (criteria.isItemDragPrimary) { if (criteria.isDragVisualCaptured) { if (criteria.canReorder) { validVisualStates[index] = "ReorderedPlaceholder"; } else { validVisualStates[index] = "DraggedPlaceholder"; } } else { if (criteria.canReorder) { validVisualStates[index] = "Reordering"; } else { validVisualStates[index] = "Dragging"; } } } else { if (criteria.canReorder) { validVisualStates[index] = "ReorderingTarget"; } else { validVisualStates[index] = "DraggingTarget"; } } } } else { // No drag validVisualStates[index] = "NotDragging"; } return(validVisualStates); }
private protected override void ChangeVisualState(bool useTransitions) { // !!!!!! WARNING: This method is actually not used (at least on skia and wasm) !!!!!! // cf. UpdateCommonStates instead ... base.ChangeVisualState(useTransitions); if (IsListViewBaseItem) { var criteria = new ListViewBaseItemVisualStatesCriteria(); criteria.isEnabled = IsEnabled; criteria.isSelected = IsSelected; criteria.focusState = FocusState; // Pressed state should be handled whether it's mouse or touch // m_inCheckboxPressedForTouch is not used because it is part of the 8.1 template criteria.isPressed = IsPointerPressed; criteria.isPointerOver = IsPointerOver; //criteria.isDragVisualCaptured = m_dragVisualCaptured; // Uno TODO if (Selector is ListViewBase spListView) { criteria.isDragging = spListView.IsInDragDrop(); criteria.isDraggedOver = spListView.IsDragOverItem(this); criteria.dragItemsCount = spListView.DragItemsCount(); criteria.isItemDragPrimary = spListView.IsContainerDragDropOwner(this); // Holding gesture will show drag visual criteria.canDrag = spListView.CanDragItems; criteria.canReorder = spListView.CanReorderItems; if (spListView.GetIsHolding()) { criteria.isHolding = true; // Uno TODO //if (m_isHolding) //{ // criteria.isItemDragPrimary = true; //} } criteria.isMultiSelect = spListView.IsMultiSelectCheckBoxEnabled; var selectionMode = spListView.SelectionMode; // if the ListView selection mode is None, we should appear as not Selected criteria.isSelected &= (selectionMode != ListViewSelectionMode.None); // Read-only mode { bool isItemClickEnabled = false; isItemClickEnabled = spListView.IsItemClickEnabled; if (selectionMode == ListViewSelectionMode.None && !isItemClickEnabled) { criteria.isPressed = false; criteria.isPointerOver = false; } } if (criteria.isMultiSelect) { criteria.isMultiSelect &= spListView.SelectionMode == ListViewSelectionMode.Multiple; } criteria.isInsideListView = true; foreach (var state in VisualStatesHelper.GetValidVisualStatesListViewBaseItem(criteria)) { GoToState(useTransitions, state); } } } }