public WriteTopicView() { InitializeComponent(); var controls = new List <Control> { Option, Send, Title, Body }; var load = Observable.FromEventPattern <RoutedEventArgs>(WrittenPage, nameof(WrittenPage.Loaded)) .SelectMany(x => ApiClient.GetNodes()) .Retry(10) .Subscribe(x => _nodes.AddRange(x)); var wrriten = Observable.FromEventPattern <TappedRoutedEventArgs>(Send, nameof(Send.Tapped)) .Select(async x => { if (Title.Text.Length == 0) { return(WrritenStatus.TitleEmpty); } if (Title.Text.Length > 120) { return(WrritenStatus.TitleLonger); } if (Body.Text.Length > 20000) { return(WrritenStatus.BodyLonger); } if (!_nodes.Exists(node => node.Title.Contains(Option.Text))) { return(WrritenStatus.NotExistNode); } var url = $"https://www.v2ex.com/new/{Option.Text}"; var html = await ApiClient.OnlyGet(url); var once = new HtmlParser().ParseDocument(html).QuerySelector("input[name='once']").GetAttribute("value"); var param = new Dictionary <string, string> { { "once", once }, { "content", Body.Text }, { "title", Title.Text } }; await ApiClient.NewTopic(url, new FormUrlEncodedContent(param), Option.Text); return(WrritenStatus.Success); }) .ObserveOnCoreDispatcher() .Subscribe(async x => { controls.ForEach(y => y.IsEnabled = false); try { switch (await x) { case WrritenStatus.NotExistNode: Toast.ShowTips("节点不存在"); break; case WrritenStatus.TitleEmpty: Toast.ShowTips("标题字数不能为0"); break; case WrritenStatus.TitleLonger: Toast.ShowTips("标题字数不能超过120"); break; case WrritenStatus.BodyLonger: Toast.ShowTips("正文字数不能超过20000"); break; case WrritenStatus.Success: Toast.ShowTips("发表成功"); PageStack.Back(); break; } } catch { Toast.ShowTips("发表失败"); } }); var type = Observable .FromEventPattern <AutoSuggestBoxTextChangedEventArgs>(Option, nameof(Option.TextChanged)) .Throttle(TimeSpan.FromMilliseconds(300)) .Select(x => _nodes.Where(node => node.Title.Contains(Option.Text))) .ObserveOnCoreDispatcher() .Subscribe(x => { foreach (var node in x) { Show.Add(node); } }); var choose = Observable .FromEventPattern <AutoSuggestBoxSuggestionChosenEventArgs>(Option, nameof(Option.SuggestionChosen)) .ObserveOnCoreDispatcher() .Subscribe(x => Option.Text = (x.EventArgs.SelectedItem as NodeModel).Title); _events = new List <IDisposable> { load, wrriten, type, choose }; }
public MainPage() { InitializeComponent(); RightPart = RightFrame; LeftPart = LeftPivot; PageStack.Next("Right", "Right", typeof(BlankPage), null); SystemNavigationManager.GetForCurrentView().BackRequested += (sender, el) => { el.Handled = true; if (PageStack.CanGoBack) { PageStack.Back(); } }; var leftChanged = Observable .FromEventPattern <SizeChangedEventArgs>(LeftPivot, nameof(LeftPivot.SizeChanged)) .ObserveOnCoreDispatcher() .Subscribe(x => { var headerpanel = FindVisualChildren <PivotHeaderPanel>(LeftPivot).ToList(); var totalwidth = LeftPivot.ActualWidth; headerpanel[0].Width = totalwidth; var items = FindVisualChildren <PivotHeaderItem>(headerpanel[0]).ToList(); for (var i = 0; i < items.Count; i++) { items[i].Width = totalwidth / items.Count - 1; } }); var rightChanged = Observable .FromEventPattern <SizeChangedEventArgs>(RightFrame, nameof(RightFrame.SizeChanged)) .ObserveOnCoreDispatcher() .Subscribe(x => { if (RootGrid.ActualWidth > 600) { LeftPivot.Width = 500; LeftPivot.Visibility = Visibility.Visible; RightFrame.Visibility = Visibility.Visible; RightFrame.SetValue(RelativePanel.RightOfProperty, LeftPivot); LeftPivot.SetValue(RelativePanel.AlignBottomWithPanelProperty, true); LeftPivot.SetValue(RelativePanel.AlignTopWithPanelProperty, true); LeftPivot.SetValue(RelativePanel.AlignLeftWithPanelProperty, true); LeftPivot.SetValue(RelativePanel.AlignRightWithPanelProperty, false); RightFrame.SetValue(RelativePanel.AlignBottomWithPanelProperty, true); RightFrame.SetValue(RelativePanel.AlignTopWithPanelProperty, true); RightFrame.SetValue(RelativePanel.AlignRightWithPanelProperty, true); RightFrame.SetValue(RelativePanel.AlignLeftWithPanelProperty, false); } else { LeftPivot.Width = double.NaN; if (RightFrame.CanGoBack) { LeftPivot.Visibility = Visibility.Visible; RightFrame.Visibility = Visibility.Collapsed; } else { LeftPivot.Visibility = Visibility.Collapsed; RightFrame.Visibility = Visibility.Visible; } LeftPivot.SetValue(RelativePanel.AlignBottomWithPanelProperty, true); LeftPivot.SetValue(RelativePanel.AlignTopWithPanelProperty, true); LeftPivot.SetValue(RelativePanel.AlignLeftWithPanelProperty, true); LeftPivot.SetValue(RelativePanel.AlignRightWithPanelProperty, true); RightFrame.SetValue(RelativePanel.AlignBottomWithPanelProperty, true); RightFrame.SetValue(RelativePanel.AlignTopWithPanelProperty, true); RightFrame.SetValue(RelativePanel.AlignRightWithPanelProperty, true); RightFrame.SetValue(RelativePanel.AlignLeftWithPanelProperty, true); } }); _events = new List <IDisposable> { leftChanged, rightChanged }; }