public ComboBoxHintProxy(ComboBox comboBox) { if (comboBox == null) throw new ArgumentNullException(nameof(comboBox)); _comboBox = comboBox; _comboBoxTextChangedEventHandler = new TextChangedEventHandler(ComboBoxTextChanged); _comboBox.AddHandler(TextBoxBase.TextChangedEvent, _comboBoxTextChangedEventHandler); _comboBox.SelectionChanged += ComboBoxSelectionChanged; _comboBox.Loaded += ComboBoxLoaded; _comboBox.IsVisibleChanged += ComboBoxIsVisibleChanged; }
public override FrameworkElement GetProperyField() { DockPanel sp = new DockPanel(); ComboBox cb = new ComboBox(); cb.IsTextSearchEnabled = true; cb.IsEditable = true; comb = cb; UpdateCombo(); comb.AddHandler(TextBox.TextChangedEvent, new TextChangedEventHandler(delegate { try { Property.SetValue(Object, new BrushConverter().ConvertFrom(null, CultureInfo.CurrentCulture, cb.Text), null); } catch { } })); Button btn = new Button(); DockPanel.SetDock(btn, Dock.Right); btn.Content = "..."; btn.Click += new RoutedEventHandler(OpenBrushDialog); sp.Children.Add(btn); sp.Children.Add(cb); return sp; }
public RowEntity(int row, Grid grid, Question question, bool textBox = false) { Rank = row; QuestionObject = question; QuestionLabel = new TextBlock(); QuestionLabel.Text = question.Title; QuestionLabel.FontSize = 12; QuestionLabel.Height = 30; QuestionLabel.FontWeight = FontWeights.Bold; Grid.SetRow(QuestionLabel, row); Grid.SetColumn(QuestionLabel, 0); grid.Children.Add(QuestionLabel); if (!textBox) { AnswerComboBox = new ComboBox(); AnswerComboBox.Height = 25; AnswerComboBox.Margin = new Thickness(0, 0, 20, 0); AnswerComboBox.Uid = question.Rank.ToString(); AnswerComboBox.ItemsSource = question.Answers; int x = 0; if (question.Default != null) { foreach (Answer a in question.Answers) { if (question.Default.Title == a.Title) { question.Value = a; AnswerComboBox.SelectedIndex = x; break; } x++; } } else if (question.Answers.Count == 1) { AnswerComboBox.SelectedIndex = 0; question.Value = question.Answers.First(); } Grid.SetRow(AnswerComboBox, row); Grid.SetColumn(AnswerComboBox, 1); grid.Children.Add(AnswerComboBox); AnswerComboBox.AddHandler(ComboBox.SelectionChangedEvent, new SelectionChangedEventHandler(selectionChange)); } else { TextBox tb = new TextBox(); tb.Height = 25; tb.Margin = new Thickness(0, 0, 20, 0); Grid.SetRow(tb, row); Grid.SetColumn(tb, 1); grid.Children.Add(tb); AnswerTextBox = tb; } }
public override FrameworkElement GetProperyField() { ComboBox cb = new ComboBox(); cb.HorizontalAlignment = HorizontalAlignment.Stretch; cb.IsTextSearchEnabled = true; cb.IsEditable = true; object cvalue = Property.GetValue(Object, null); foreach (var item in typeof(Colors).GetProperties()) { cb.Items.Add(item.Name); if (cvalue != null && cvalue == item.GetValue(null, null)) { cb.SelectedValue = item.Name; cvalue = null; } } if (cvalue != null) { cb.Text = cvalue.ToString(); } cb.AddHandler(TextBox.TextChangedEvent, new TextChangedEventHandler(delegate { try { Property.SetValue(Object, new ColorConverter().ConvertFrom(null, CultureInfo.CurrentCulture, cb.Text), null); } catch { } })); comb = cb; return cb; }
public LiveSimulation(Circuit.Schematic Simulate, Audio.Device Device, Audio.Channel[] Inputs, Audio.Channel[] Outputs) { try { InitializeComponent(); // Make a clone of the schematic so we can mess with it. Circuit.Schematic clone = Circuit.Schematic.Deserialize(Simulate.Serialize(), Log); clone.Elements.ItemAdded += OnElementAdded; clone.Elements.ItemRemoved += OnElementRemoved; Schematic = new SimulationSchematic(clone); Schematic.SelectionChanged += OnProbeSelected; // Build the circuit from the schematic. circuit = Schematic.Schematic.Build(Log); // Create the input and output controls. IEnumerable<Circuit.Component> components = circuit.Components; // Create audio input channels. for (int i = 0; i < Inputs.Length; ++i) InputChannels.Add(new InputChannel(i) { Name = Inputs[i].Name }); ComputerAlgebra.Expression speakers = 0; foreach (Circuit.Component i in components) { Circuit.Symbol S = i.Tag as Circuit.Symbol; if (S == null) continue; SymbolControl tag = (SymbolControl)S.Tag; if (tag == null) continue; // Create potentiometers. Circuit.IPotControl c = i as Circuit.IPotControl; if (c != null) { PotControl pot = new PotControl() { Width = 80, Height = 80, Opacity = 0.5, FontSize = 15, FontWeight = FontWeights.Bold, }; Schematic.overlays.Children.Add(pot); Canvas.SetLeft(pot, Canvas.GetLeft(tag) - pot.Width / 2 + tag.Width / 2); Canvas.SetTop(pot, Canvas.GetTop(tag) - pot.Height / 2 + tag.Height / 2); pot.Value = c.PotValue; pot.ValueChanged += x => { c.PotValue = x; UpdateSimulation(false); }; pot.MouseEnter += (o, e) => pot.Opacity = 0.95; pot.MouseLeave += (o, e) => pot.Opacity = 0.5; } // Create Buttons. Circuit.IButtonControl b = i as Circuit.IButtonControl; if (b != null) { Button button = new Button() { Width = tag.Width, Height = tag.Height, Opacity = 0.5, Background = Brushes.White, }; Schematic.overlays.Children.Add(button); Canvas.SetLeft(button, Canvas.GetLeft(tag)); Canvas.SetTop(button, Canvas.GetTop(tag)); button.Click += (o, e) => { // Click all the buttons in the group. foreach (Circuit.IButtonControl j in components.OfType<Circuit.IButtonControl>().Where(x => x.Group == b.Group)) j.Click(); UpdateSimulation(true); }; button.MouseEnter += (o, e) => button.Opacity = 0.95; button.MouseLeave += (o, e) => button.Opacity = 0.5; } Circuit.Speaker output = i as Circuit.Speaker; if (output != null) speakers += output.V; // Create input controls. Circuit.Input input = i as Circuit.Input; if (input != null) { tag.ShowText = false; ComboBox combo = new ComboBox() { Width = 80, Height = 24, Opacity = 0.5, IsEditable = true, SelectedValuePath = "Tag", }; foreach (InputChannel j in InputChannels) { combo.Items.Add(new ComboBoxItem() { Tag = j, Content = j.Name }); } Schematic.overlays.Children.Add(combo); Canvas.SetLeft(combo, Canvas.GetLeft(tag) - combo.Width / 2 + tag.Width / 2); Canvas.SetTop(combo, Canvas.GetTop(tag) - combo.Height / 2 + tag.Height / 2); ComputerAlgebra.Expression V = Circuit.Component.DependentVariable(input.Name, Circuit.Component.t); inputs[V] = new SignalChannel(0); combo.SelectionChanged += (o, e) => { if (combo.SelectedItem != null) { ComboBoxItem it = (ComboBoxItem)combo.SelectedItem; inputs[V] = new InputChannel(((InputChannel)it.Tag).Index); } }; combo.AddHandler(TextBox.KeyDownEvent, new KeyEventHandler((o, e) => { try { inputs[V] = new SignalChannel(Circuit.Quantity.Parse(combo.Text, Circuit.Units.V)); } catch (Exception) { // If there is an error in the expression, zero out the signal. inputs[V] = new SignalChannel(0); } })); if (combo.Items.Count > 0) combo.SelectedItem = combo.Items[0]; else combo.Text = "0 V"; combo.MouseEnter += (o, e) => combo.Opacity = 0.95; combo.MouseLeave += (o, e) => combo.Opacity = 0.5; } } // Create audio output channels. for (int i = 0; i < Outputs.Length; ++i) { OutputChannel c = new OutputChannel(i) { Name = Outputs[i].Name, Signal = speakers }; c.PropertyChanged += (o, e) => { if (e.PropertyName == "Signal") RebuildSolution(); }; OutputChannels.Add(c); } // Begin audio processing. if (Inputs.Any() || Outputs.Any()) stream = Device.Open(ProcessSamples, Inputs, Outputs); else stream = new NullStream(ProcessSamples); ContentRendered += (o, e) => RebuildSolution(); Closed += (s, e) => stream.Stop(); } catch (Exception Ex) { MessageBox.Show(Ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } }
/// <summary> /// 具体刷新Tab内容的方法 /// </summary> /// <param name="tab"></param> private void RefreshTabContent(TabItem tab) { //logger.Debug("刷新控件ing"); if (tab.Tag == null) return; int index = (int)tab.Tag; var prompts = viewModel.Prompts.Where(it => it.TabIndex == index) .ToList(); Grid grid = new Grid(); ScrollViewer viewer = new ScrollViewer(); viewer.VerticalScrollBarVisibility = ScrollBarVisibility.Auto; viewer.Content = grid; tab.Content = viewer; grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(10) }); grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength() }); grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(20) }); grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(230) }); grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(220) }); grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(250, GridUnitType.Star) }); StackPanel leftSP = new StackPanel(); leftSP.Margin = new Thickness(5, 0, 30, 0); leftSP.SetValue(Grid.RowProperty, 1); leftSP.SetValue(Grid.ColumnProperty, 1); StackPanel middleSP = new StackPanel(); middleSP.Margin = new Thickness(30, 0, 30, 0); middleSP.SetValue(Grid.RowProperty, 1); middleSP.SetValue(Grid.ColumnProperty, 2); StackPanel rightSP = new StackPanel(); rightSP.Margin = new Thickness(30, 0, 0, 0); rightSP.SetValue(Grid.RowProperty, 1); rightSP.SetValue(Grid.ColumnProperty, 3); grid.Children.Add(leftSP); grid.Children.Add(middleSP); grid.Children.Add(rightSP); for (int i = 0; i < prompts.Count(); i++) { var prompt = prompts[i]; if (prompt.ControlType == ControlType.TextBox || prompt.ControlType == ControlType.UnEditabledTextBox || prompt.ControlType == ControlType.Invisabled) { Label label = new Label(); label.Foreground = getBrushById(prompt.ColorIndex); label.DataContext = prompt; label.SetBinding(Label.ContentProperty, new Binding("Name")); label.SetBinding(Label.VisibilityProperty, new Binding("Visible") { Converter = new PromptValueToVisibilityConverter() }); label.SetBinding(Label.ToolTipProperty, new Binding("HelpMessage")); leftSP.Children.Add(label); TextBox tb = new TextBox(); //tb.MouseDoubleClick += tb_MouseDoubleClick; tb.AddHandler(UIElement.MouseEnterEvent, new RoutedEventHandler(tb_MouseLeftButtonDown), true); tb.DataContext = prompt; tb.SetBinding(TextBox.TextProperty, new Binding("PromptValue") { ValidatesOnExceptions = true, ValidatesOnDataErrors = true, NotifyOnValidationError = true }); tb.SetBinding(TextBox.VisibilityProperty, new Binding("Visible") { Converter = new PromptValueToVisibilityConverter() }); tb.SetBinding(TextBox.IsEnabledProperty, new Binding("IsEnabled")); tb.SetBinding(TextBox.ToolTipProperty, new Binding("HelpMessage")); leftSP.Children.Add(tb); TextBlock error = new TextBlock(); error.Foreground = Brushes.Red; error.DataContext = prompt; error.SetBinding(TextBlock.TextProperty, new Binding("ErrorMessage")); error.SetBinding(Label.VisibilityProperty, new Binding("ErrorMessage") { Converter = new PromptValueToVisibilityConverter() }); leftSP.Children.Add(error); } else if (prompt.ControlType == ControlType.CheckBox) { CheckBox cb = new CheckBox(); cb.Foreground = getBrushById(prompt.ColorIndex); cb.Margin = new Thickness(0, 3, 0, 3); cb.DataContext = prompt; cb.AddHandler(UIElement.MouseEnterEvent, new RoutedEventHandler(tb_MouseLeftButtonDown), true); cb.SetBinding(CheckBox.IsCheckedProperty, new Binding("PromptValue") { Converter = new PromptValueToCheckedConverter() }); cb.SetBinding(CheckBox.ContentProperty, new Binding("Name")); cb.SetBinding(CheckBox.VisibilityProperty, new Binding("Visible") { Converter = new PromptValueToVisibilityConverter() }); cb.SetBinding(CheckBox.ToolTipProperty, new Binding("HelpMessage")); rightSP.Children.Add(cb); } else if (prompt.ControlType == ControlType.ComboBox) { Label label = new Label(); label.Foreground = getBrushById(prompt.ColorIndex); label.DataContext = prompt; label.SetBinding(Label.ContentProperty, new Binding("Name")); label.SetBinding(Label.VisibilityProperty, new Binding("Visible") { Converter = new PromptValueToVisibilityConverter() }); label.SetBinding(Label.ToolTipProperty, new Binding("HelpMessage")); leftSP.Children.Add(label); ComboBox combo = new ComboBox(); combo.Foreground = getBrushById(prompt.ColorIndex); combo.DataContext = prompt; combo.AddHandler(UIElement.MouseEnterEvent, new RoutedEventHandler(tb_MouseLeftButtonDown), true); combo.SetBinding(ComboBox.SelectedValueProperty, new Binding("PromptValue") { Converter = new PromptValueToIntConverter() }); combo.SetBinding(ComboBox.VisibilityProperty, new Binding("Visible") { Converter = new PromptValueToVisibilityConverter() }); combo.SetBinding(ComboBox.ToolTipProperty, new Binding("HelpMessage")); combo.ItemsSource = prompt.ComboBoxItemsString.Split('|'); //DataTemplate dt = new DataTemplate(); //dt.DataType = typeof(string); //FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(TextBlock)); leftSP.Children.Add(combo); } else if (prompt.ControlType == ControlType.RadioButton) { GroupBox gb = new GroupBox(); gb.Foreground = getBrushById(prompt.ColorIndex); gb.DataContext = prompt; gb.SetBinding(GroupBox.HeaderProperty, new Binding("Tip")); gb.SetBinding(GroupBox.VisibilityProperty, new Binding("Visible") { Converter = new PromptValueToVisibilityConverter() }); middleSP.Children.Add(gb); StackPanel spinsder = new StackPanel(); gb.Content = spinsder; RadioButton rb = new RadioButton(); rb.Foreground = getBrushById(prompt.ColorIndex); rb.Margin = new Thickness(0, 5, 0, 5); rb.DataContext = prompt; rb.AddHandler(UIElement.MouseEnterEvent, new RoutedEventHandler(tb_MouseLeftButtonDown), true); rb.SetBinding(RadioButton.ContentProperty, new Binding("Name")); rb.SetBinding(RadioButton.IsCheckedProperty, new Binding("PromptValue") { Converter = new PromptValueToCheckedConverter() }); rb.SetBinding(RadioButton.VisibilityProperty, new Binding("Visible") { Converter = new PromptValueToVisibilityConverter() }); spinsder.Children.Add(rb); for (int x = i + 1; x < prompts.Count; x++) { var nextPrompt = prompts[x]; if (nextPrompt.ControlType != ControlType.OtherRadioButton) { break; } RadioButton rb2 = new RadioButton(); rb2.Foreground = getBrushById(prompt.ColorIndex); rb2.Margin = new Thickness(0, 5, 0, 5); rb2.DataContext = nextPrompt; rb2.AddHandler(UIElement.MouseEnterEvent, new RoutedEventHandler(tb_MouseLeftButtonDown), true); rb2.SetBinding(RadioButton.ContentProperty, new Binding("Name")); rb2.SetBinding(RadioButton.IsCheckedProperty, new Binding("PromptValue") { Converter = new PromptValueToCheckedConverter() }); rb2.SetBinding(RadioButton.VisibilityProperty, new Binding("Visible") { Converter = new PromptValueToVisibilityConverter() }); spinsder.Children.Add(rb2); } } } }