public static MediaElementController CreateController(MovieManager movieManager, int screens)
 {
     switch (Settings.Instance.MovieWindowsMode) {
         case MovieWindowsMode.PrimaryScreenOnly:
             return new PrimayScreenOnlyController(movieManager, screens);
         case MovieWindowsMode.AllScreensSameMovie:
             return new AllScreensSameMovieController(movieManager, screens);
         case MovieWindowsMode.AllScreenDifferentMovies:
             return new AllScreenDifferentMoviesController(movieManager, screens);
         default:
             throw new ArgumentOutOfRangeException();
     }
 }
 protected MediaElementController(MovieManager movieManager, int screens)
 {
     MovieManager = movieManager;
     if (Settings.Instance.MovieWindowsMode == MovieWindowsMode.PrimaryScreenOnly) {
         MediaElements = new MediaElement[screens];
         MediaElements[0] = CreateMediaElement(0);
     } else {
         MediaElements = Enumerable
             .Range(0, screens)
             .Select(CreateMediaElement)
             .ToArray();
     }
 }
 public PrimayScreenOnlyController(MovieManager movieManager, int screens)
     : base(movieManager, screens)
 {
 }
 public AllScreenDifferentMoviesController(MovieManager movieManager, int screens)
     : base(movieManager, screens)
 {
 }
 public AllScreensSameMovieController(MovieManager movieManager, int screens)
     : base(movieManager, screens)
 {
 }