コード例 #1
0
        public IObservable <bool> GetActivationForView(IActivatable view)
        {
            var fe = view as FrameworkElement;

            if (fe == null)
            {
                return(Observable <bool> .Empty);
            }
#if WINDOWS_UWP
            var viewLoaded = WindowsObservable.FromEventPattern <FrameworkElement, object>(x => fe.Loading += x,
                                                                                           x => fe.Loading -= x).Select(_ => true);
#else
            var viewLoaded = Observable.FromEventPattern <RoutedEventHandler, RoutedEventArgs>(x => fe.Loaded += x,
                                                                                               x => fe.Loaded -= x).Select(_ => true);
#endif

            var viewUnloaded = Observable.FromEventPattern <RoutedEventHandler, RoutedEventArgs>(x => fe.Unloaded += x,
                                                                                                 x => fe.Unloaded -= x).Select(_ => false);

            return(viewLoaded
                   .Merge(viewUnloaded)
                   .Select(b => b ? fe.WhenAnyValue(x => x.IsHitTestVisible).SkipWhile(x => !x) : Observables.False)
                   .Switch()
                   .DistinctUntilChanged());
        }
コード例 #2
0
        public ObservableMediaPlayer(MediaPlayer mediaPlayer, IScheduler scheduler)
        {
            _mediaPlayer = mediaPlayer;
            _scheduler   = scheduler;
            CurrentState = WindowsObservable.FromEventPattern <MediaPlaybackSession, object>(
                h => _mediaPlayer.PlaybackSession.PlaybackStateChanged += h,
                h => _mediaPlayer.PlaybackSession.PlaybackStateChanged -= h
                )
                           .Select(x => x.Sender.PlaybackState)
                           .ToReadOnlyReactiveProperty(eventScheduler: _scheduler)
                           .AddTo(_disposables);
            NowBuffering = CurrentState.Select(x => x == MediaPlaybackState.Buffering || x == MediaPlaybackState.Opening)
                           .ToReadOnlyReactiveProperty(eventScheduler: _scheduler)
                           .AddTo(_disposables);
            NowPlaying = CurrentState
                         .Select(x =>
            {
                return
                //						x == MediaPlaybackState.Opening ||
                (x == MediaPlaybackState.Buffering ||
                 x == MediaPlaybackState.Playing);
            })
                         .ToReactiveProperty(_scheduler)
                         .AddTo(_disposables);

            PlaybackRate = WindowsObservable.FromEventPattern <MediaPlaybackSession, object>(
                h => _mediaPlayer.PlaybackSession.PlaybackRateChanged += h,
                h => _mediaPlayer.PlaybackSession.PlaybackRateChanged -= h
                )
                           .Select(x => x.Sender.PlaybackRate)
                           .ToReadOnlyReactiveProperty(initialValue: _mediaPlayer.PlaybackSession.PlaybackRate, eventScheduler: _scheduler)
                           .AddTo(_disposables);


            IsMuted = WindowsObservable.FromEventPattern <MediaPlayer, object>(
                h => _mediaPlayer.IsMutedChanged += h,
                h => _mediaPlayer.IsMutedChanged -= h
                )
                      .Select(x => x.Sender.IsMuted)
                      .ToReadOnlyReactiveProperty(eventScheduler: _scheduler)
                      .AddTo(_disposables);

            SoundVolume = WindowsObservable.FromEventPattern <MediaPlayer, object>(
                h => _mediaPlayer.VolumeChanged += h,
                h => _mediaPlayer.VolumeChanged -= h
                )
                          .Select(x => x.Sender.Volume)
                          .ToReadOnlyReactiveProperty(eventScheduler: _scheduler)
                          .AddTo(_disposables);
        }
コード例 #3
0
        /// <inheritdoc/>
        public IObservable <bool> GetActivationForView(IActivatable view)
        {
            var fe = view as FrameworkElement;

            if (fe == null)
            {
                return(Observable <bool> .Empty);
            }
#if WINDOWS_UWP
            var viewLoaded = WindowsObservable.FromEventPattern <FrameworkElement, object>(
                x => fe.Loading += x,
                x => fe.Loading -= x)
                             .Select(_ => true);

            var hitTestVisible = fe.WhenAnyValue(x => x.IsHitTestVisible);
#else
            var viewLoaded = Observable.FromEventPattern <RoutedEventHandler, RoutedEventArgs>(
                x => fe.Loaded += x,
                x => fe.Loaded -= x)
                             .Select(_ => true);

            var hitTestVisible = Observable.FromEventPattern <DependencyPropertyChangedEventHandler, DependencyPropertyChangedEventArgs>(
                x => fe.IsHitTestVisibleChanged += x,
                x => fe.IsHitTestVisibleChanged -= x)
                                 .Select(x => (bool)x.EventArgs.NewValue);
#endif

            var viewUnloaded = Observable.FromEventPattern <RoutedEventHandler, RoutedEventArgs>(
                x => fe.Unloaded += x,
                x => fe.Unloaded -= x)
                               .Select(_ => false);

            return(viewLoaded
                   .Merge(viewUnloaded)
                   .Merge(hitTestVisible)
                   .DistinctUntilChanged());
        }
コード例 #4
0
 private OrientationManager()
 {
     di = Windows.Graphics.Display.DisplayInformation.GetForCurrentView();
     OrientationChanged = WindowsObservable.FromEventPattern <Windows.Graphics.Display.DisplayInformation, object>(h => di.OrientationChanged += h, h => di.OrientationChanged -= h)
                          .Select(_ => (DisplayOrientations)di.CurrentOrientation).Publish().RefCount();
 }