xmake.repo/packages/n/noesis/latest/Include/NsGui/VisualStateManager.h
2024-12-22 19:15:02 +08:00

84 lines
3.3 KiB
C++

////////////////////////////////////////////////////////////////////////////////////////////////////
// NoesisGUI - http://www.noesisengine.com
// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef __GUI_VISUALSTATEMANAGER_H__
#define __GUI_VISUALSTATEMANAGER_H__
#include <NsCore/Noesis.h>
#include <NsCore/ReflectionDeclare.h>
#include <NsGui/DependencyObject.h>
#include <NsGui/AnimationApi.h>
namespace Noesis
{
class FrameworkElement;
class VisualStateGroup;
class VisualTransition;
template<class T> class UICollection;
typedef UICollection<VisualStateGroup> VisualStateGroupCollection;
////////////////////////////////////////////////////////////////////////////////////////////////////
/// Manages states and the logic for transitioning between states for controls.
///
/// The VisualStateManager enables you to specify states for a control, the appearance of a control
/// when it is in a certain state, and when a control changes states.
///
/// http://msdn.microsoft.com/en-us/library/system.windows.visualstatemanager.aspx
////////////////////////////////////////////////////////////////////////////////////////////////////
class NS_GUI_ANIMATION_API VisualStateManager: public DependencyObject
{
public:
VisualStateManager();
~VisualStateManager();
/// Gets or sets the VisualStateManager object that transitions between the states of a control
//@{
static VisualStateManager* GetCustomVisualStateManager(const DependencyObject* obj);
static void SetCustomVisualStateManager(DependencyObject* obj, VisualStateManager* value);
//@}
/// Gets or sets a collection of VisualStateGroup objects
//@{
static VisualStateGroupCollection* GetVisualStateGroups(const DependencyObject* obj);
static void SetVisualStateGroups(DependencyObject* obj, VisualStateGroupCollection* groups);
//@}
/// Transitions the control between two states. Use this method to transition states on control
/// that has a ControlTemplate.
/// \param control The control to transition between states
/// \param stateName The state to transition to
/// \param useTransitions true to use a VisualTransition to transition between states,
/// otherwise false.
/// \return true if the control successfully transitioned to the new state, otherwise false.
static bool GoToState(FrameworkElement* control, Symbol stateName, bool useTransitions);
/// Transitions the element between two states. Use this method to transition states that are
/// defined by an application, rather than defined by a control.
/// \param root The root element that contains the VisualStateManager
/// \param stateName The state to transition to.
/// \param useTransitions true to use a VisualTransition object to transition between states
static bool GoToElementState(FrameworkElement* root, Symbol stateName,
bool useTransitions);
public:
/// Dependency properties
//@{
static const DependencyProperty* CustomVisualStateManagerProperty; // Attached
static const DependencyProperty* VisualStateGroupsProperty; // Attached
//@}
NS_DECLARE_REFLECTION(VisualStateManager, DependencyObject)
};
}
#endif