/// <summary>
		/// Raises the <see cref="E:ItemCheckTriState"/> event.
		/// </summary>
		/// <param name="args">The <see cref="ZetaLib.Windows.Controls.TriStateCheckBoxesListView.ItemCheckTriStateEventArgs"/> instance containing the event data.</param>
		protected virtual void OnItemCheckTriState(
			ItemCheckTriStateEventArgs args )
		{
			if ( ItemCheckTriState != null )
			{
				ItemCheckTriState( this, args );
			}
		}
		/// <summary>
		/// Applies the given state to the given item.
		/// Raises events, too.
		/// </summary>
		/// <param name="item">The item.</param>
		/// <param name="action">The action.</param>
		/// <param name="stateImageIndex">Index of the state image.</param>
		/// <param name="raiseEvents">if set to <c>true</c> [raise events].</param>
		private void SetTriStateToItem(
			ListViewItem item,
			ListViewAction action,
			int stateImageIndex,
			bool raiseEvents )
		{
			bool canSet = true;

			if ( raiseEvents )
			{
				ItemCheckEventArgs args =
					new ItemCheckEventArgs(
					item.Index,
					ConvertStateImageIndexToCheckState(
					stateImageIndex ),
					ConvertStateImageIndexToCheckState(
					item.StateImageIndex ) );

				OnItemCheck( args );

				ItemCheckTriStateEventArgs triArgs =
					new ItemCheckTriStateEventArgs(
					item,
					action,
					ConvertStateImageIndexToCheckState(
					stateImageIndex ),
					ConvertStateImageIndexToCheckState(
					item.StateImageIndex ) );

				OnItemCheckTriState( triArgs );

				canSet = !triArgs.Cancel;
			}

			if ( canSet )
			{
				// Actually set.
				// THIS IS THE ONLY PLACE to set.
				item.StateImageIndex = stateImageIndex;

				if ( raiseEvents )
				{
					ItemCheckedEventArgs args =
						new ItemCheckedEventArgs( item );

					OnItemChecked( args );

					ItemCheckedTriStateEventArgs triArgs =
						new ItemCheckedTriStateEventArgs(
						item,
						action,
						item.StateImageIndex );

					OnItemCheckedTriState( triArgs );
				}
			}
		}