public Chat(TabPage tab, TabTag tag, ListBox messageList) { Tab = tab; Tag = tag; MessageList = messageList; }
// 创建一个新的标签 public ChromiumWebBrowser CreateNewTab(string url, string refererUrl = null) { // 声明一个新的浏览器对象 ChromiumWebBrowser browser = new ChromiumWebBrowser() { Address = url }; BrowserSettings browserSettings = new BrowserSettings(); browserSettings.Plugins = CefState.Enabled; browser.BrowserSettings = browserSettings; InitBrowser(browser); // 初始化浏览器地址栏和导航栏 DockPanel TopBarPanel = new DockPanel() { Style = Resources["TopBarPanel"] as Style }; DockPanel.SetDock(TopBarPanel, Dock.Top); // 回退 前进按钮 以及地址栏的位置 DockPanel TopBarPanelIn = new DockPanel(); Border TopBarPanelBorder = new Border(); TopBarPanel.Children.Add(TopBarPanelBorder); TopBarPanelBorder.Child = TopBarPanelIn; // 回退按钮 Button BtnBack = new Button() { Content = "\xe6a4", Width = 30, Height = 24, FontSize = 17, Style = Resources["IconButton"] as Style }; // 绑定命令 将浏览器回退功能命令绑定到回退按钮上 BtnBack.SetBinding(Button.CommandProperty, new Binding() { Source = browser.BackCommand }); // 前进按钮 Button BtnForward = new Button() { Content = "\xe6a5", Width = 30, Height = 24, Margin = new Thickness(5, 0, 0, 0), FontSize = 17, Style = Resources["IconButton"] as Style }; // 将浏览器前进功能命令绑定到前进按钮上 BtnForward.SetBinding(Button.CommandProperty, new Binding() { Source = browser.ForwardCommand }); // 文本地址栏 TextBox TextAddress = new TextBox() { FontSize = 14, Height = 24, Margin = new Thickness(5, 0, 0, 0), Padding = new Thickness(5, 0, 5, 0), Style = Resources["TxtAddress"] as Style }; TextBoxBindingUpdateOnEnterBehaviour behaviour = new TextBoxBindingUpdateOnEnterBehaviour(); // 将行为附加到对象上 behaviour.Attach(TextAddress); TextAddress.SetBinding(TextBox.TextProperty, new Binding() { Source = browser, Path = new PropertyPath("Address"), // 绑定中数据流的方向 自动更新另一方 Mode = BindingMode.TwoWay });; // 地址栏中添加 回退前进按钮以及地址栏 TopBarPanelIn.Children.Add(BtnBack); TopBarPanelIn.Children.Add(BtnForward); TopBarPanelIn.Children.Add(TextAddress); // 初始化Tab控件可选项 // 选项卡 TabItem newTab = new TabItem() { Header = "New Tab", Style = Resources["CloseTab"] as Style, // 边框粗细 BorderThickness = new Thickness(0) }; // 设置当前选中的第一项 BrowserTabs.SelectedItem = newTab; newTab.Name = "Tab_" + newTab.TabIndex; browser.Name = "Browser_" + newTab.TabIndex; newTab.SetBinding(TabItem.HeaderProperty, new Binding() { Mode = BindingMode.OneWay, Source = browser, Path = new PropertyPath("Title"), FallbackValue = "info.tangce.cn" }); // 选项卡中的样式内容等 DockPanel TabItemPanel = new DockPanel() { HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch }; newTab.Content = TabItemPanel; // 浏览器栏 DockPanel BrowserPanel = new DockPanel() { VerticalAlignment = VerticalAlignment.Stretch }; BrowserPanel.Children.Add(browser); // 进度条 ProgressBar progressBar = new ProgressBar() { HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Top, Height = 2, Style = Resources["AutoWidth"] as Style, BorderThickness = new Thickness(0) }; // 进度条绑定方法 浏览器是否加载中 progressBar.SetBinding(ProgressBar.IsIndeterminateProperty, new Binding() { Path = new PropertyPath("IsLoading"), Source = browser }); // 进度条嵌板 对象 DockPanel ProgressPanel = new DockPanel() { Height = 2, // 元素显示状态 隐藏 Visibility = Visibility.Hidden }; // 进度条嵌板针对元素可见参数绑定 // 如果加载中显示进度条嵌板 ProgressPanel.SetBinding(DockPanel.VisibilityProperty, new Binding() { Path = new PropertyPath("IsLoading"), Source = browser, // Visibility枚举值布尔转换器 Converter = new BooleanToVisibilityConverter() }); // 将进度条元素设置在Dock 底部 DockPanel.SetDock(ProgressPanel, Dock.Bottom); // 将进度条放置到进度条嵌板中 ProgressPanel.Children.Add(progressBar); // 将进度条嵌板 浏览器工具嵌板以及浏览器页面嵌板添加到标签选项卡中 TabItemPanel.Children.Add(ProgressPanel); TabItemPanel.Children.Add(TopBarPanel); TabItemPanel.Children.Add(BrowserPanel); TabTag tabtag = new TabTag { IsOpen = true, Browser = browser, OrigURL = url, CurURL = url, Title = browser.Title, RefererURL = refererUrl, DateCreated = DateTime.Now }; // 新的标签自定义信息 newTab.Tag = tabtag; // 显示页面 BrowserTabs.Items.Add(newTab); return(browser); }