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()); }
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); }
/// <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()); }
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(); }