Esempio n. 1
0
        public object Ask(Parameter par)
        {
            var vlc = main.Children.FindByName(ValueControl);
            if (vlc != null)
                main.Children.Remove(vlc);
            Question.Text = "";
            foreach (string s in par.Question.Split(new[] { "\\n" }, StringSplitOptions.None))
            {
                Question.Inlines.Add(new Run { Text = s });
                Question.Inlines.Add(new LineBreak());
            }
            if (par.ParamType == ParamType.PBool)
            {
                var value = new ComboBox { Width = 100, Height = 20, Name = ValueControl, Margin = new Thickness(5, 0, 0, 0) };
                Grid.SetRow(value, 1);
                main.Children.Add(value);
                value.Items.Add(Boolean.TrueString);
                value.Items.Add(Boolean.FalseString);
                value.SelectedIndex = 0;
                value.Focus();
            }
            else
            {
                var value = new TextBox { Width = 400, Name = ValueControl, Margin = new Thickness(5, 0, 0, 0) };
                Grid.SetRow(value, 1);
                main.Children.Add(value);
                if (par.ParamType == ParamType.PDouble || par.ParamType == ParamType.PFuzzy)
                {
                    value.Text = "0";
                    value.TextChanged += ValueTextChanged;
                    value.Tag = par.ParamType;
                }
                else
                    value.Tag = ParamType.PString;
                value.SelectAll();
                value.Focus();
            }

            if (ShowDialog() == true)
            {

                UIElement uie = main.Children.FindByName(ValueControl);
                if (uie is TextBox)
                {
                    ParamType pt = (ParamType) (uie as TextBox).Tag;
                    if (pt == ParamType.PDouble || pt == ParamType.PFuzzy)
                        return double.Parse((uie as TextBox).Text);
                    return (uie as TextBox).Text;
                }
                if (uie is ComboBox)
                    return bool.Parse((uie as ComboBox).Text);
            }
            return null;
        }
Esempio n. 2
0
        /// <summary>Called when a cell in the column enters editing mode.</summary>
        /// <param name="editingElement">The element that the column displays for a cell in editing mode.</param>
        /// <param name="editingEventArgs">Information about the user gesture that is causing a cell to enter editing mode.</param>
        /// <returns>The unedited value.</returns>
        // Token: 0x060048B8 RID: 18616 RVA: 0x0014A458 File Offset: 0x00148658
        protected override object PrepareCellForEdit(FrameworkElement editingElement, RoutedEventArgs editingEventArgs)
        {
            ComboBox comboBox = editingElement as ComboBox;

            if (comboBox != null)
            {
                comboBox.Focus();
                object comboBoxSelectionValue = this.GetComboBoxSelectionValue(comboBox);
                if (DataGridComboBoxColumn.IsComboBoxOpeningInputEvent(editingEventArgs))
                {
                    comboBox.IsDropDownOpen = true;
                }
                return(comboBoxSelectionValue);
            }
            return(null);
        }
Esempio n. 3
0
		public void CreateTextFromUserWindow (String PromptString, String ExistingValue)
			{
			this.WindowStyle = System.Windows.WindowStyle.None;

			Grid RootGrid = m_XAML.CreateGrid (new int [] { 2, 1, 1 }, new int [] { 1, 1, 1 });
			this.Content = RootGrid;

			Label PromptLabel = new Label ();
			PromptLabel.MouseLeftButtonDown += new MouseButtonEventHandler (PromptLabel_MouseLeftButtonDown);
			PromptLabel.Content = PromptString;
			RootGrid.Children.Add (PromptLabel);
			Grid.SetColumn (PromptLabel, 0);
			Grid.SetRow (PromptLabel, 0);
			Grid.SetColumnSpan (PromptLabel, 3);

			if (AllowKeyChangeAndAdd == true)
				{
				Button KeyChangeButton = new Button ();
				KeyChangeButton.Content = "ändern/neu..";
				RootGrid.Children.Add (KeyChangeButton);
				Grid.SetColumn (KeyChangeButton, 0);
				Grid.SetRow (KeyChangeButton, 1);
				KeyChangeButton.Click += new RoutedEventHandler (KeyChangeButton_Click);
				}

			Button OKButton = new Button ();
			OKButton.Content = "OK";
			OKButton.IsDefault = true;
			RootGrid.Children.Add (OKButton);
			Grid.SetColumn (OKButton, 2);
			Grid.SetRow (OKButton, 1);
			OKButton.Click += new RoutedEventHandler (OKButton_Click);

			Button CancelButton = new Button ();
			CancelButton.Content = "Abbrechen";
			RootGrid.Children.Add (CancelButton);
			Grid.SetColumn (CancelButton, 1);
			Grid.SetRow (CancelButton, 1);
			CancelButton.Click += new RoutedEventHandler (CancelButton_Click);

			if (AllowedValues == null)
				{
				m_InputBox = new TextBox ();
				//m_InputBox.AcceptsReturn = true;
				RootGrid.Children.Add (m_InputBox);
				Grid.SetColumn (m_InputBox, 0);
				Grid.SetRow (m_InputBox, 2);
				Grid.SetColumnSpan (m_InputBox, 3);
				m_InputBox.Text = ExistingValue;
				m_InputBox.Focus ();
				}
			else
				{
				m_InputComboBox = new ComboBox ();
				m_InputComboBox.IsReadOnly = true;
				m_InputComboBox.IsEditable = false;
				RootGrid.Children.Add (m_InputComboBox);
				Grid.SetColumn (m_InputComboBox, 0);
				Grid.SetRow (m_InputComboBox, 2);
				Grid.SetColumnSpan (m_InputComboBox, 3);
				m_InputComboBox.Focus ();
				foreach (String AllowedEntry in AllowedValues)
					{
					m_InputComboBox.Items.Add (AllowedEntry);
					}
				m_InputComboBox.SelectedValue = ExistingValue;
				m_InputComboBox.Text = ExistingValue;
				m_InputComboBox.IsDropDownOpen = true;
				}

			}
Esempio n. 4
0
		private void FillDateControl (ComboBox RessourceGroupSelection, String BookingGroup)
			{
			BrushConverter BRConverter = new BrushConverter ();
			m_DateControlButtons.Children.Clear ();
			DataSet Ressources = m_DataBase.GetCommonDataSet ("Select * from Ressource where BookingGroup = '"
															  + BookingGroup + "' order by MainAdresse");
			m_DateTimeControlButtons = m_XAML.CreateGrid (new int [] { 18, 20, 5, 5, 5, 10 }, new int [] { 1 });
			m_DateControlButtons.Children.Add (m_DateTimeControlButtons);
			Grid.SetRow (m_DateTimeControlButtons, 0);
			Grid.SetColumn (m_DateTimeControlButtons, 2);
			FillDateTimeBlock (m_DateTimeControlButtons);

			List<String> MainAddresses = new List<string> ();
			foreach (DataRow RessourceRow in Ressources.Tables ["Ressource"].Rows)
				{
				if (MainAddresses.Contains (RessourceRow ["MainAdresse"].ToString ()) == true)
					continue;
				MainAddresses.Add (RessourceRow ["MainAdresse"].ToString ());
				}

			if (MainAddresses.Count > 1)
				{
				Button MainAdressText = new Button ();
				m_DateControlButtons.Children.Add (MainAdressText);
				MainAdressText.Content = "Block";
				Grid.SetRow (MainAdressText, 0);
				Grid.SetColumn (MainAdressText, 0);
				MainAdressText.FontSize = 20;
				MainAdressText.FontWeight = FontWeights.ExtraBold;
				MainAdressText.Foreground = (Brush)BRConverter.ConvertFromString ("Black");
				MainAdressText.Background = (Brush)BRConverter.ConvertFromString ("#C0C0C0");

				ComboBox MainAdresseCombo = new ComboBox ();
				m_DateControlButtons.Children.Add (MainAdresseCombo);
				MainAdresseCombo.SelectionChanged += new SelectionChangedEventHandler (MainAdresseCombo_SelectionChanged);
				Grid.SetRow (MainAdresseCombo, 0);
				Grid.SetColumn (MainAdresseCombo, 1);
				MainAdresseCombo.FontSize = 20;
				MainAdresseCombo.FontWeight = FontWeights.ExtraBold;
			
				MainAdresseCombo.Foreground = (Brush)BRConverter.ConvertFromString ("LightGray");
				MainAdresseCombo.Background = (Brush)BRConverter.ConvertFromString ("Blue");
				List<String> ProcessMainAdresses = new List<string> ();
				foreach (DataRow RessourceRow in Ressources.Tables ["Ressource"].Rows)
					{
					String MainAdresse = RessourceRow ["MainAdresse"].ToString ();
					if (ProcessMainAdresses.Contains (MainAdresse))
						continue;
					ProcessMainAdresses.Add (MainAdresse);
					ListBoxItem NewItem = new ListBoxItem ();
					NewItem.Content = MainAdresse;
					NewItem.Tag = RessourceRow;
					MainAdresseCombo.Items.Add (NewItem);
					}
				m_TimeControlButtons.Children.Clear ();
				m_BookingControlButtons.Children.Clear ();
				MainAdresseCombo.IsDropDownOpen = true;
				MainAdresseCombo.Focus ();
				}
			else
				{
				m_TimeControlButtons.Children.Clear ();
				m_BookingControlButtons.Children.Clear ();
				ActiveResource = Ressources.Tables ["Ressource"].Rows [0];
				FillTimeControl (m_TimeControlButtons, m_BookingControlButtons, Ressources.Tables ["Ressource"].Rows [0]);
				RessourceGroupSelection.MoveFocus (new TraversalRequest (FocusNavigationDirection.Next));
				}
			}
Esempio n. 5
0
        public static ComboBox WorkWithEmailBox(Grid grid, TextBox emailTextBox, TextCompositionEventArgs e, int columnSpanEmailBox)
        {
            ComboBox comboBox = new ComboBox();
            const string val = "@";
            if (e.Text != val) return comboBox;
            if (emailTextBox.Text.Length < 1) return null;
            if (emailTextBox.Text.IndexOf(val, StringComparison.Ordinal) != -1) return comboBox;
            Grid.SetColumnSpan(emailTextBox, columnSpanEmailBox);

            comboBox.DropDownClosed += (a, r) =>
            {
                if (comboBox.SelectedIndex == -1) return;
                grid.Children.Remove(comboBox);
                Grid.SetColumnSpan(emailTextBox, columnSpanEmailBox+2);
                if (comboBox.SelectedIndex == 0)
                {
                    emailTextBox.Text += val;
                    emailTextBox.Focus();
                }
                else
                {
                    emailTextBox.Text += comboBox.SelectedItem.ToString();
                }
                emailTextBox.SelectionStart = emailTextBox.Text.Length;
                emailTextBox.Focus();
            };
            Grid.SetRow(comboBox, 2);
            comboBox.Items.Add("написать другой");
            comboBox.Items.Add(val + "gmail.com");
            comboBox.Items.Add(val + "mail.ru");
            comboBox.Items.Add(val + "yandex.ua");
            comboBox.Items.Add(val + "rambler.ru");
            comboBox.Items.Add(val + "hotmail.com");
            comboBox.Items.Add(val + "yahoo.com");
            comboBox.Items.Add(val + "inbox.ru");
            comboBox.Items.Add(val + "list.ru");
            comboBox.Items.Add(val + "bk.ru");
            comboBox.Items.Add(val + "mail.ua");
            comboBox.Height = emailTextBox.ActualHeight;
            Grid.SetColumn(comboBox, 4);
            Grid.SetColumnSpan(comboBox, 2);
            grid.Children.Add(comboBox);
            comboBox.IsDropDownOpen = true;
            comboBox.Focus();
            return comboBox;
        }
Esempio n. 6
0
		public void FocusTest ()
		{
			ComboBox box = new ComboBox ();
			Assert.IsFalse (ComboBox.GetIsSelectionActive (box));
			CreateAsyncTest (box,
				() => Assert.IsTrue (box.Focus (), "#1"),
				() => {
					Assert.IsFalse (ComboBox.GetIsSelectionActive (box), "#2");
					box.Items.Add ("string");
					box.SelectedItem = box.Items [0];
				},
				() => Assert.IsFalse (ComboBox.GetIsSelectionActive (box), "#3")
			);
		}
Esempio n. 7
0
		private void InitContextMenu()
		{
			#region Init Menu Item
			mitAutoFit = new MenuItemEx(
				main.resource.imgAuto_Fit_On,
				main.resource.imgAuto_Fit_Off);
			mitFixedPoint = new MenuItemEx(
				main.resource.imgFixed_Point_On,
				main.resource.imgFixed_Point_Off);
			mitCollectionExplore = new MenuItemEx(
				main.resource.imgDeep_Explor_On,
				main.resource.imgDeep_Explor_Off);
			mitBookmark = new MenuItemEx(
				main.resource.imgBookmark);
			mitAutoLevels = new MenuItemEx(
				main.resource.imgAutoLevels_On,
				main.resource.imgAutoLevels_Off);
			mitPageMode = new MenuItemEx(
				main.resource.imgViewHalfPage,
				main.resource.imgViewFullPage);
			mitHelp = new MenuItemEx(
				main.resource.imgHelp);
			mitExit = new MenuItemEx(
				main.resource.imgCancel);
			mitSetting = new MenuItem();
			mitAssociateFiles = new MenuItemEx(
				main.resource.imgAssociate);

			mitDropShadow = new MenuItem();
			mitBgOpacity = new MenuItem();
			mitThreshold = new MenuItem();
			mitScalingMode = new MenuItem();
			#endregion

			#region Auto fit desktop
			mitAutoFit.StaysOpenOnClick = true;
			mitAutoFit.isChecked = isAutoFitOn;
			mitAutoFit.ToolTip = Comisor.Resource.Auto_Fit_c;
			mitAutoFit.Header = strAutoFit + "(_F)" + strAutoFitLock;

			mitAutoFit.Click += (o, e) =>
			{
				isAutoFitOn = !isAutoFitOn;
				if (!mitAutoFit.isChecked)
				{
					mitFixedPoint.isChecked = false;
					isFixedPointOn = false;
					mitFixedPoint.Header = Comisor.Resource.Fixed_Point + "(_P)" + strFixedPoint;
				}
				mitAutoFit.Header = strAutoFit + "(_F)" + strAutoFitLock;
			};

			mitAutoFit.MouseWheel += (o, e) =>
			{
				if (mitAutoFit.isChecked)
				{
					// Circle from 0 to 2.
					indexAutoFitLock = (2 + indexAutoFitLock + (e.Delta > 0 ? -1 : 1)) % 2;
					mitAutoFit.Header = strAutoFit + "(_F)" + strAutoFitLock;
				}
			};
			#endregion

			#region Fixed Point
			mitFixedPoint.ToolTip = Comisor.Resource.Fixed_Point_c;
			mitFixedPoint.StaysOpenOnClick = true;
			mitFixedPoint.isChecked = isFixedPointOn;
			mitFixedPoint.Header = Comisor.Resource.Fixed_Point + "(_P)" + strFixedPoint;

			mitFixedPoint.Click += (o, e) =>
			{
				isFixedPointOn = !isFixedPointOn;
				if (mitFixedPoint.isChecked)
				{
					mitAutoFit.isChecked = true;
					isAutoFitOn = true;
					mitAutoFit.Header = strAutoFit + "(_F)" + strAutoFitLock;
				}
				mitFixedPoint.Header = Comisor.Resource.Fixed_Point + "(_P)" + strFixedPoint;
				UpdateRefPoint();
			};

			mitFixedPoint.MouseWheel += (o, e) =>
			{
				// Circle from 0 to 3, to prevent the overflow, additionally plused 4 in front of the indexFixedPoint.
				indexFixedPoint = (4 + indexFixedPoint + (e.Delta > 0 ? -1 : 1)) % 4;
				mitFixedPoint.Header = Comisor.Resource.Fixed_Point + "(_P)" + strFixedPoint;

				UpdateRefPoint();
			};
			#endregion

			#region Page Mode
			mitPageMode.Header = Comisor.Resource.Page_Mode_Full + "(_M)" + strPageModeJudge[indexPageModeJudge];
			mitPageMode.ToolTip = Comisor.Resource.Page_Mode_c;
			mitPageMode.StaysOpenOnClick = true;

			mitPageMode.Click += (o, e) =>
			{
				Size sz = GetSize();
				if (mitPageMode.isChecked)
				{
					mitPageMode.Header = Comisor.Resource.Page_Mode_Half + "(_M)" + strPageModeJudge[indexPageModeJudge];
					DividePage();
					if (isHalfPage) return;
					if ((indexFixedPoint % 2) == 1)
						SetSize(sz.Width * (1 - dbPageModeRatio));
					else
						SetSize(sz.Width * dbPageModeRatio);
					UpdateInfo();
				}
				else
				{
					mitPageMode.Header = Comisor.Resource.Page_Mode_Full + "(_M)" + strPageModeJudge[indexPageModeJudge];

					if (isHalfPage) return;

					imgContainer.Source = bmpOriginal;

					UpdateSizeInfo();
					if ((indexFixedPoint % 2) == 1)
						SetSize(sz.Width / (1 - dbPageModeRatio));
					else
						SetSize(sz.Width / dbPageModeRatio);
					UpdateInfo();
					if (mitAutoLevels.isChecked) AutoLevels();
				}
			};

			mitPageMode.MouseWheel += (o, e) =>
			{
				string currnt =
					mitPageMode.isChecked ?
					Comisor.Resource.Page_Mode_Half + "(_M)" :
					Comisor.Resource.Page_Mode_Full + "(_M)";
				indexPageModeJudge = (2 + indexPageModeJudge + (e.Delta > 0 ? -1 : 1)) % 2;
				mitPageMode.Header = currnt + strPageModeJudge[indexPageModeJudge];

				if (indexPageModeJudge == 0)
					isHalfPage = bmpOriginal.PixelWidth < bmpOriginal.PixelHeight;
				else
					isHalfPage = false;
			};
			#endregion

			#region Collection Explore
			mitCollectionExplore.Header = Comisor.Resource.Collection_Explore + "(_C)";
			mitCollectionExplore.ToolTip = Comisor.Resource.Collection_Explore_c;
			mitCollectionExplore.StaysOpenOnClick = true;
			mitCollectionExplore.isChecked = false;
			mitCollectionExplore.Click += (o, e) =>
			{
				if (bdrInfo.Opacity == 0) ShowInfoBar();

				Mouse.OverrideCursor = Cursors.AppStarting;

				if (mitCollectionExplore.isChecked)
				{
					GetCollection(true);
					UpdateInfo(Comisor.Resource.State_DeepExplore);
				}
				else
				{
					GetCollection(false);
					UpdateInfo();
				}
				System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke(new InvokeDelegate(EndBusy), System.Windows.Threading.DispatcherPriority.Background, null);
			};
			#endregion

			#region AutoLevels
			mitAutoLevels.Header = Comisor.Resource.Auto_Levels + "(_L)";
			mitAutoLevels.ToolTip = Comisor.Resource.Auto_Levels_c;
			mitAutoLevels.StaysOpenOnClick = true;
			mitAutoLevels.isChecked = isAutoLevelOn;
			mitAutoLevels.Click += (o, e) =>
			{
				Mouse.OverrideCursor = main.resource.curHand_Wait;
				// Fix the bug of spilt page.
				if (mitPageMode.isChecked && croppedBmpHalf[0] != null)
				{
					if (mitAutoLevels.isChecked)
					{
						int index = Array.IndexOf<CroppedBitmap>(croppedBmpHalf, imgContainer.Source as CroppedBitmap);
						for (int i = 0; i < 2; i++)
						{
							croppedBmpHalf[i] = new CroppedBitmap(ys.ImageProcessor.AutoLevels(
								(BitmapSource)croppedBmpHalf[i],
								autoLevelsThreshold,
								colorWeight[2],
								colorWeight[1],
								colorWeight[0]),
								new Int32Rect(0, 0, (int)szOriginal.Width, (int)szOriginal.Height)
							);
						}
						imgContainer.Source = croppedBmpHalf[index];
					}
					else
					{
						imgContainer.Source = bmpOriginal;
						UpdateSizeInfo();
						DividePage();
					}
				}
				else
					AutoLevels();

				Dispatcher.CurrentDispatcher.Invoke(new InvokeDelegate(EndBusy), System.Windows.Threading.DispatcherPriority.Background, null);
			};
			#endregion

			#region Help
			mitHelp.Header = Comisor.Resource.Help + "(_H)";
			mitHelp.Click += new RoutedEventHandler((o, e) => { ShowHelpBox(); });
			#endregion

			#region Exit
			mitExit.Header = Comisor.Resource.Exit + "(_X)";
			mitExit.Click += new RoutedEventHandler((o, e) => { CloseWindow(); });
			#endregion

			#region Bookmark
			mitBookmark.Header = Comisor.Resource.Bookmark + "(_B)";
			mitBookmark.ToolTip = Comisor.Resource.Bookmark_c;

			#region Init Add button and textbox
			ComboBox cbAdd = new ComboBox();
			MenuItem mitAdd = new MenuItem();
			cbAdd.MinWidth = 120;
			cbAdd.HorizontalAlignment = HorizontalAlignment.Left;
			cbAdd.IsEditable = true;
			btnAddBookmark.Content = main.resource.imgPlus;
			btnAddBookmark.Margin = new Thickness(2);

			mitAdd.StaysOpenOnClick = true;
			mitAdd.Icon = btnAddBookmark;
			mitAdd.Header = cbAdd;
			mitBookmark.Items.Add(mitAdd);
			mitBookmark.Items.Add(new Separator());

			mitBookmark.SubmenuOpened += (o, e) =>
			{
				System.Collections.Generic.List<string> nameOption = new System.Collections.Generic.List<string>();
				nameOption.AddRange(imgInfo.FullName.Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries));
				ys.DataProcessor.RemoveSame(ref nameOption);
				nameOption.Reverse();
				cbAdd.ItemsSource = nameOption;
				cbAdd.SelectedIndex = 0;
				cbAdd.Focus();
			};

			cbAdd.PreviewKeyDown += (o, e) =>
			{
				if (e.Key == Key.Enter)
				{
					btnAddBookmark.RaiseEvent(new RoutedEventArgs(Button.ClickEvent, btnAddBookmark));
				}
			};

			btnAddBookmark.Click += (o, e) =>
			{
				if (e.OriginalSource is string) cbAdd.Text = e.OriginalSource as string;
				Bookmark bk = new Bookmark(cbAdd.Text, imgInfo.FullName);
				bookmarks.Insert(0, bk);

				Button btnDelete = new Button();
				Label lbName = new Label();
				MenuItem mit = new MenuItem();

				btnDelete.Content = main.resource.imgMinuts;
				btnDelete.Margin = new Thickness(2);
				btnDelete.Click += (oo, ee) =>
				{
					bookmarks.Remove(bk);
					mitBookmark.Items.Remove(mit);
				};
				lbName.Content = cbAdd.Text;
				mit.Icon = btnDelete;
				mit.Header = lbName;
				mit.ToolTip = bk.filePath + "\n" + bk.date.ToShortDateString();

				mitBookmark.Items.Insert(2, mit);

				mit.Click += (oo, ee) =>
				{
					if (File.Exists(bk.filePath))
						CheckAndStart(bk.filePath);
					else
					{
						if (ReportException(Comisor.Resource.Bookmark_FileNotFound, false, MessageBoxButton.OKCancel)
							== MessageBoxResult.OK)
						{
							System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog();
							openFileDialog.CheckFileExists = true;
							openFileDialog.InitialDirectory = ys.DataProcessor.GetAvailableParentDir(bk.filePath);
							if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
							{
								bk.filePath = openFileDialog.FileName;
								bk.date = DateTime.Now;
								mit.ToolTip = bk.filePath + "\n" + bk.date.ToShortDateString();
								CheckAndStart(bk.filePath);
							}
						}
					}
				};

				mit.PreviewMouseRightButtonUp += (oo, ee) =>
				{
					Comisor.Class.BookmarkEditor editor = new Comisor.Class.BookmarkEditor(main, bk.name, bk.filePath, imgInfo.FullName);
					editor.ShowDialog();
					if (editor.isOK)
					{
						bk.name = editor.cbName.Text;
						bk.filePath = editor.cbPath.Text;
						bk.date = DateTime.Now;
						mit.ToolTip = bk.filePath + "\n" + bk.date.ToShortDateString();
						lbName.Content = editor.cbName.Text;
					}
					ee.Handled = true;
				};
			};
			#endregion

			#region Init bookmark list
			foreach (Bookmark bookmark in bookmarks)
			{
				Label lbName = new Label();
				Button btnDelete = new Button();
				MenuItem mit = new MenuItem();
				// bookmark 此时只能出现在“=”右边。它只是指针,最后将停留在bookmarks数组的最后一项。
				ys.Bookmark bk = bookmark;

				lbName.Content = bk.name;
				btnDelete.Content = main.resource.imgMinuts;
				btnDelete.Margin = new Thickness(2);

				btnDelete.Click += (o, e) =>
				{
					bookmarks.Remove(bk);
					mitBookmark.Items.Remove(mit);
				};
				mit.Icon = btnDelete;
				mit.Header = lbName;
				mit.ToolTip = bk.filePath + "\n" + bk.date.ToLongDateString();
				mitBookmark.Items.Add(mit);
				mit.Click += (o, e) =>
				{
					if (File.Exists(bk.filePath))
						CheckAndStart(bk.filePath);
					else
					{
						if (ReportException(Comisor.Resource.Bookmark_FileNotFound, false, MessageBoxButton.OKCancel)
							== MessageBoxResult.OK)
						{
							System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog();
							openFileDialog.CheckFileExists = true;
							openFileDialog.InitialDirectory = ys.DataProcessor.GetAvailableParentDir(bk.filePath);
							if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
							{
								bk.filePath = openFileDialog.FileName;
								bk.date = DateTime.Now;
								mit.ToolTip = bk.filePath + "\n" + bk.date.ToShortDateString();
							}
							CheckAndStart(bk.filePath);
						}
					}
				};

				mit.PreviewMouseRightButtonUp += (oo, ee) =>
				{
					Comisor.Class.BookmarkEditor editor = new Comisor.Class.BookmarkEditor(main, bk.name, bk.filePath, imgInfo.FullName);
					editor.ShowDialog();
					if (editor.isOK)
					{
						bk.name = editor.cbName.Text;
						bk.filePath = editor.cbPath.Text;
						bk.date = DateTime.Now;
						mit.ToolTip = bk.filePath + "\n" + bk.date.ToShortDateString();
						lbName.Content = editor.cbName.Text;
					}
					ee.Handled = true;
				};
			}
			#endregion
			#endregion

			#region Setting
			#region Associate Files
			Label lbAssociateFiles = new Label();
			lbAssociateFiles.Content = Comisor.Resource.Associate_Files + "(_A)";
			lbAssociateFiles.ToolTip = Comisor.Resource.Associate_Files_c;
			mitAssociateFiles.Header = lbAssociateFiles;
			mitAssociateFiles.Click += (o, e) =>
			{
				WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
				bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator);

				if (!hasAdministrativeRight)
				{
					ProcessStartInfo processInfo = new ProcessStartInfo();
					processInfo.Verb = "runas";
					processInfo.FileName = GetType().Assembly.Location;
					processInfo.Arguments = Comisor.Resource.Associate_Files_Switch;
					try
					{
						Process.Start(processInfo);
					}
					catch
					{
						//Do nothing. Probably the user canceled the UAC window
					}
				}
				else
				{
					Comisor.Class.Associator fileAssociator = new Comisor.Class.Associator(main);
					fileAssociator.Opacity = 0;
					fileAssociator.Show();
					fileAssociator.WindowStateAnimation(false, 1, true);
				}
			};
			#endregion

			#region Background Opacity
			Label lbBgOpacity = new Label();
			StackPanel stpBgOpacity = new StackPanel();
			if (!File.Exists(UserInfoFileName))
			{
				sldBgOpacity.Minimum = 0;
				sldBgOpacity.Maximum = 100;
				sldBgOpacity.Value = 50;
			}
			lbBgOpacity.Content = Comisor.Resource.Background_Opacity + "(_B):" + sldBgOpacity.Value.ToString("0");
			sldBgOpacity.ToolTip = Comisor.Resource.Background_Opacity_c;
			sldBgOpacity.TickFrequency = (sldBgOpacity.Maximum - sldBgOpacity.Minimum) / 4;
			sldBgOpacity.TickPlacement = System.Windows.Controls.Primitives.TickPlacement.TopLeft;
#if Window_Borderless
			main.firstStartComplete = (o, e) => { ShowHideBg(isBgOn); };
#endif
			sldBgOpacity.ValueChanged += (o, e) =>
			{
				if(isBgOn) scbBg.Opacity = sldBgOpacity.Value / 100;
				lbBgOpacity.Content = Comisor.Resource.Background_Opacity + "(_B):" + sldBgOpacity.Value.ToString("0");
			};

			mitBgOpacity.IsCheckable = true;
			mitBgOpacity.IsChecked = isBgOn;
			mitBgOpacity.Click += (o, e) =>
			{
				isBgOn = !isBgOn;
				ShowHideBg(isBgOn);
			};

			stpBgOpacity.Children.Add(lbBgOpacity);
			stpBgOpacity.Children.Add(sldBgOpacity);
			mitBgOpacity.Header = stpBgOpacity;
			#endregion

			#region Drop Shadow
			Label lbDropShadow = new Label();
			Slider sldDropShadow = new Slider();
			StackPanel stpDropShadow = new StackPanel();
			lbDropShadow.Content = Comisor.Resource.Shadow_Radius + "(_S):" + dropShadowRadius.ToString("00");
			sldDropShadow.ToolTip = Comisor.Resource.Shadow_Radius_c;
			sldDropShadow.Minimum = 0;
			sldDropShadow.Maximum = 30;
			sldDropShadow.TickFrequency = (sldDropShadow.Maximum - sldDropShadow.Minimum) / 4;
			sldDropShadow.TickPlacement = System.Windows.Controls.Primitives.TickPlacement.TopLeft;
			sldDropShadow.Value = dropShadowRadius;
			sldDropShadow.ValueChanged += (o, e) =>
			{
				dropShadowRadius = sldDropShadow.Value;
				shadowEffect.BlurRadius = dropShadowRadius;
				lbDropShadow.Content = Comisor.Resource.Shadow_Radius + "(_S):" + dropShadowRadius.ToString("00");
			};

			mitDropShadow.IsCheckable = true;
			mitDropShadow.IsChecked = true;
			mitDropShadow.Click += (o, e) =>
			{
				// 这是WPF的一个bug。
				if (mitDropShadow.IsChecked)
				{
					imgContainer.Effect = shadowEffect;
				}
				else
				{
					imgContainer.Effect = null;
				}
			};

			stpDropShadow.Children.Add(lbDropShadow);
			stpDropShadow.Children.Add(sldDropShadow);
			mitDropShadow.Header = stpDropShadow;
			#endregion

			#region Pixel Threshold
			Label lbThreshold = new Label();
			ComboBox cbScalingMode = new ComboBox();
			Slider sldThreshold = new Slider();
			StackPanel stpThreshold = new StackPanel();

			lbThreshold.Content = Comisor.Resource.Pixel_Threshold + "(_P):" + pixelShowThreshold.ToString("00");

			cbScalingMode.MinWidth = 100;
			cbScalingMode.Margin = new Thickness(3);
			cbScalingMode.ItemsSource = new string[]
			{
				Comisor.Resource.ScalingMode_Unspecified,
				Comisor.Resource.ScalingMode_LowQuality,
				Comisor.Resource.ScalingMode_HighQuality,
				Comisor.Resource.ScalingMode_NearestNeighbor,
			};
			cbScalingMode.SelectedIndex = 0;
			cbScalingMode.SelectionChanged += (o, e) =>
			{
				scalingMode = (BitmapScalingMode)cbScalingMode.SelectedIndex;
				AutoRenderOption();
			};

			sldThreshold.ToolTip = Comisor.Resource.Pixel_Threshold_c;
			sldThreshold.Minimum = 0;
			sldThreshold.Maximum = 36;
			sldThreshold.TickFrequency = (sldThreshold.Maximum - sldThreshold.Minimum) / 4;
			sldThreshold.TickPlacement = System.Windows.Controls.Primitives.TickPlacement.TopLeft;
			sldThreshold.Value = pixelShowThreshold;
			sldThreshold.ValueChanged += new RoutedPropertyChangedEventHandler<double>(
				(o, e) =>
				{
					pixelShowThreshold = sldThreshold.Value;
					lbThreshold.Content = Comisor.Resource.Pixel_Threshold + "(_P):" + pixelShowThreshold.ToString("00");
					AutoRenderOption();
				}
			);

			mitThreshold.IsCheckable = true;
			mitThreshold.IsChecked = true;
			mitThreshold.Click += (o, e) =>
			{
				stpThreshold.IsEnabled = mitThreshold.IsChecked;
				AutoRenderOption();
			};

			stpThreshold.Children.Add(lbThreshold);
			stpThreshold.Children.Add(cbScalingMode);
			stpThreshold.Children.Add(sldThreshold);
			mitThreshold.Header = stpThreshold;
			#endregion

			#region Page Mode Ratio
			Label lbPageModeRatio = new Label();
			Slider sldPageModeRatio = new Slider();
			StackPanel stpPageModeRatio = new StackPanel();

			lbPageModeRatio.Content = Comisor.Resource.Page_Mode_Ratio + ":" + dbPageModeRatio.ToString("p0");
			sldPageModeRatio.ToolTip = Comisor.Resource.Page_Mode_Ratio_c;
			sldPageModeRatio.Minimum = 0;
			sldPageModeRatio.Maximum = 1;
			sldPageModeRatio.LargeChange = 0.01;
			sldPageModeRatio.TickFrequency = (sldPageModeRatio.Maximum - sldPageModeRatio.Minimum) / 4;
			sldPageModeRatio.TickPlacement = System.Windows.Controls.Primitives.TickPlacement.TopLeft;
			sldPageModeRatio.Value = dbPageModeRatio;
			stpPageModeRatio.Children.Add(lbPageModeRatio);
			stpPageModeRatio.Children.Add(sldPageModeRatio);
			sldPageModeRatio.ValueChanged += new RoutedPropertyChangedEventHandler<double>(
				(o, e) =>
				{
					dbPageModeRatio = sldPageModeRatio.Value;
					lbPageModeRatio.Content = Comisor.Resource.Page_Mode_Ratio + ":" + dbPageModeRatio.ToString("p0");
				}
			);
			#endregion

			#region Float Value
			Label lbFlotageDrag = new Label();
			Slider sldFlotageDrag = new Slider();
			StackPanel stpFlotageDrag = new StackPanel();

			lbFlotageDrag.Content = Comisor.Resource.Float_Value + ":" + dragFlotage.ToString("00");
			sldFlotageDrag.ToolTip = Comisor.Resource.Float_Value_c;
			sldFlotageDrag.Minimum = 0;
			sldFlotageDrag.Maximum = 70;
			sldFlotageDrag.TickFrequency = (sldFlotageDrag.Maximum - sldFlotageDrag.Minimum) / 4;
			sldFlotageDrag.TickPlacement = System.Windows.Controls.Primitives.TickPlacement.TopLeft;
			sldFlotageDrag.Value = dragFlotage;
			stpFlotageDrag.Children.Add(lbFlotageDrag);
			stpFlotageDrag.Children.Add(sldFlotageDrag);
			sldFlotageDrag.ValueChanged += new RoutedPropertyChangedEventHandler<double>(
				(o, e) =>
				{
					dragFlotage = sldFlotageDrag.Value;
					lbFlotageDrag.Content = Comisor.Resource.Float_Value + ":" + dragFlotage.ToString("00");
				}
			);
			#endregion

			#region Attenuater
			Label lbAttenuater = new Label();
			Slider sldAttenuater = new Slider();
			StackPanel stpAttenuater = new StackPanel();

			lbAttenuater.Content = Comisor.Resource.Attenuate + ":" + velocityAttenuater.ToString("00");
			sldAttenuater.ToolTip = Comisor.Resource.Attenuate_c;
			sldAttenuater.Minimum = 110;
			sldAttenuater.Maximum = 190;
			sldAttenuater.TickFrequency = (sldAttenuater.Maximum - sldAttenuater.Minimum) / 4;
			sldAttenuater.TickPlacement = System.Windows.Controls.Primitives.TickPlacement.TopLeft;
			sldAttenuater.Value = velocityAttenuater;
			stpAttenuater.Children.Add(lbAttenuater);
			stpAttenuater.Children.Add(sldAttenuater);
			sldAttenuater.ValueChanged += new RoutedPropertyChangedEventHandler<double>(
				(o, e) =>
				{
					velocityAttenuater = sldAttenuater.Value;
					lbAttenuater.Content = Comisor.Resource.Attenuate + ":" + velocityAttenuater.ToString("00");
				}
			);
			#endregion

			#region Main
			Border bdrSetting = new Border();
			bdrSetting.CornerRadius = new CornerRadius(2);
			bdrSetting.Padding = new Thickness(2);
			bdrSetting.Child = main.resource.imgSetting;
			bdrSetting.Focusable = false;
			bdrSetting.BorderThickness = new Thickness(1);
			bdrSetting.MouseEnter += (o, e) =>
			{
				bdrSetting.BorderBrush = Brushes.Gray;
				bdrSetting.Background = Brushes.White;
			};
			bdrSetting.MouseLeave += (o, e) =>
			{
				bdrSetting.BorderBrush = Brushes.Transparent;
				bdrSetting.Background = Brushes.Transparent;
			};
			bdrSetting.PreviewMouseDown += (o, e) =>
			{
				System.Diagnostics.Process.Start("explorer.exe", "/select," + UserInfoFileName);
			};

			mitSetting.Icon = bdrSetting;
			mitSetting.Header = Comisor.Resource.Setting + "(_S)";
			mitSetting.ToolTip = Comisor.Resource.Setting_c;
			mitSetting.Items.Add(mitAssociateFiles);
			mitSetting.Items.Add(new Separator());
			mitSetting.Items.Add(mitBgOpacity);
			mitSetting.Items.Add(mitDropShadow);
			mitSetting.Items.Add(mitThreshold);
			mitSetting.Items.Add(mitScalingMode);
			mitSetting.Items.Add(stpPageModeRatio);
			mitSetting.Items.Add(stpFlotageDrag);
			mitSetting.Items.Add(stpAttenuater);

			#endregion

			#endregion

			// Init the context menu.
			contextMenu = new ContextMenu();

			contextMenu.Items.Add(mitAutoFit);
			contextMenu.Items.Add(mitFixedPoint);
			contextMenu.Items.Add(mitPageMode);
			contextMenu.Items.Add(mitCollectionExplore);
			contextMenu.Items.Add(mitAutoLevels);
			contextMenu.Items.Add(mitHelp);
			contextMenu.Items.Add(mitExit);
			contextMenu.Items.Add(new Separator());
			contextMenu.Items.Add(mitBookmark);
			contextMenu.Items.Add(mitSetting);

			contextMenu.FontFamily = new FontFamily("Microsoft YaHei");
			foreach (Control mit in contextMenu.Items)
				if (mit is MenuItem) mit.Height = 24;
#if Window_Borderless
			bdrTransformFrame.ContextMenu = contextMenu;
#else
			cavStage.ContextMenu = contextMenu;
#endif
		}