So you're not using a modelling program- thus you'll have to provide the cube/texture information yourself from code.
Let's start out simple with one textured triangle.
VertexPositionTextures contains Vertex (location of points in space) and texture (where does that point match to a point on an image). Keep in mind that the location for the texture is on a scale of 0 (top,left) to 1 (bottom,right):
Thus for one triangle:
Vertices.Position = new Vector3(-5, 0, 0);
Vertices.Position = new Vector3(0, 10, 0);
Vertices.Position = new Vector3(5, 0, 0);
Vertices.TextureCoordinate = new Vector2(0, 1);
Vertices.TextureCoordinate = new Vector2(0.5f, 0);
Vertices.TextureCoordinate = new Vector2(1, 1);
This holds the information of the location of the points in space, and the location of the texture. The point (2) is located at 0,10,0 in 3D space, and the location of the the point on the texture is like this halfway along the X axis (x=0.5) and top of y-axis (y=0):
For a 3D cube you basically you have a list of Vector3 points for each corner. To create your cube you'll need to create 12 triangles like that (3 points per triangle, 2 triangles per side, 6 sides for a cube) = VertexPositionTexture, and map each corner to the corners of your texture.
Another approach is to use indexed vertices; this means you need to define 8 VertextPositionTextures only for each 3D coordinate, and have a separate array int to hold the triangle information. This makes it easier to work with, but in your case may be a headache to get the texture coordinates right; as each point would also share the texture position. For more insight in that method read this: http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series1/Indices.php
Sidenote: you can load models in XNA so I'm not sure how to interpret "I have to use XNA, so that is not an option"