Лучший отвечающий
Метод для возврата цвета

Вопрос
-
Здравствуйте! Как написать метод, возвращающий цвет из данного диалогового окна?
Код XAML:
<Window x:Class="graphics_editor.Cololrs" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:graphics_editor" mc:Ignorable="d" Title="Цвет линии" Height="300" Width="300"> <Grid> <Label Content="Выберите цвет линии: " HorizontalAlignment="Left" Height="25" Margin="20,15,0,0" VerticalAlignment="Top" Width="150"> </Label> <RadioButton GroupName="Stroke_Color" Checked="RadioButton_Checked" Content="Красный" HorizontalAlignment="Left" Margin="20,40,0,0" VerticalAlignment="Top"> </RadioButton> <RadioButton GroupName="Stroke_Color" Checked="RadioButton_Checked" Content="Зеленый" HorizontalAlignment="Left" Margin="20,60,0,0" VerticalAlignment="Top"> </RadioButton> <RadioButton GroupName="Stroke_Color" Checked="RadioButton_Checked" Content="Черный" HorizontalAlignment="Left" Margin="20,80,0,0" VerticalAlignment="Top"> </RadioButton> <RadioButton GroupName="Stroke_Color" Checked="RadioButton_Checked" Content="Синий" HorizontalAlignment="Left" Margin="20,100,0,0" VerticalAlignment="Top"> </RadioButton> <RadioButton GroupName="Stroke_Color" Checked="RadioButton_Checked" Content="Коричневый" HorizontalAlignment="Left" Margin="20,120,0,0" VerticalAlignment="Top"> </RadioButton> <RadioButton GroupName="Stroke_Color" Checked="RadioButton_Checked" Content="Оранжевый" HorizontalAlignment="Left" Margin="20,140,0,0" VerticalAlignment="Top"> </RadioButton> <RadioButton GroupName="Stroke_Color" Checked="RadioButton_Checked" Content="Белый" HorizontalAlignment="Left" Margin="20,160,0,0" VerticalAlignment="Top"> </RadioButton> <RadioButton GroupName="Stroke_Color" Checked="RadioButton_Checked" Content="Желтый" HorizontalAlignment="Left" Margin="20,180,0,0" VerticalAlignment="Top"> </RadioButton> <Button Content="ОК" Click="okButton_Click" HorizontalAlignment="Left" Height="25" Margin="20,216,0,0" VerticalAlignment="Top" Width="80"> </Button> <Button Content="Отмена" Click="Cancel_click" HorizontalAlignment="Left" Height="25" Margin="157,216,0,0" VerticalAlignment="Top" Width="100"> </Button> </Grid> </Window>
Код C# этого окна:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace graphics_editor { /// <summary> /// Логика взаимодействия для Cololrs.xaml /// </summary> public partial class Cololrs : Window { public Cololrs() { InitializeComponent(); } /* * Checked */ public void RadioButton_Checked(object sender, RoutedEventArgs e) { RadioButton pressed = (RadioButton)sender; MessageBox.Show(pressed.Content.ToString()); } /* * */ /* * Ок */ void okButton_Click(object sender, RoutedEventArgs e) { this.DialogResult = true; } /* * Cancel */ public void Cancel_click(object sender, RoutedEventArgs e) { this.DialogResult = false; } } }
Код C# главного окна для данного окна:
private void Draw_line(object sender, RoutedEventArgs e) { LineGeometry MyLine = new LineGeometry(); Window_draw_line dlg = new Window_draw_line(); if (dlg.ShowDialog() == true) { Path myPath = new Path(); Cololrs dlg_color = new Cololrs(); if(dlg_color.ShowDialog() == true) { //действия для получения цвета линии } } }
31 августа 2017 г. 13:30
Ответы
-
Как то так: public partial class Cololrs : Window { public Dictionary<string, Color> map = new Dictionary<string, Color>(); public Color SelectedColor { get; private set; } public Cololrs() { InitializeComponent(); map.Add("Красный", Colors.Red); // Здесь все остальные цвета map.Add("Желтый", Colors.Yellow); } public void RadioButton_Checked(object sender, RoutedEventArgs e) { RadioButton pressed = (RadioButton)sender; MessageBox.Show(pressed.Content.ToString()); SelectedColor = map[pressed.Content.ToString()]; } }
Не проверял, но вроде все правильно. Теперь в главной форме можно обращаться к свойств SelectedColor для получения цвета выбранного в дочерней форме.- Предложено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 5 сентября 2017 г. 7:05
- Помечено в качестве ответа ZhukVl 5 сентября 2017 г. 14:40
5 сентября 2017 г. 5:41Отвечающий -
Во-первых, вы можете в форме использующей Color добавить new SolidColorBrush(colors.SelectedColor)
Во-вторых, можно заменить в моем примере Color на Brush, а в конструкторе добавлять не цвета, а кисти.
- Помечено в качестве ответа ZhukVl 5 сентября 2017 г. 14:40
5 сентября 2017 г. 10:38Отвечающий
Все ответы
-
Добрый день.
Можно воспользоваться табличным способом, у формы Colors добавить поле типа Dictionary в котором каждому названию кнопки будет соответствовать цвет. При выборе Radiobutton кроме показа его названия нужно сохранять контент в какое-то промежуточное свойство формы. Ну и добавить public свойство типа которое по имени из Dictionary будет возвращать цвет. Если что-то не получится, задавайте вопросы.
- Предложено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 4 сентября 2017 г. 12:51
4 сентября 2017 г. 6:35Отвечающий -
Что это за поле Dictionary ?4 сентября 2017 г. 19:17
-
Можете примерно показать как это будет выглядеть?4 сентября 2017 г. 19:34
-
Как то так: public partial class Cololrs : Window { public Dictionary<string, Color> map = new Dictionary<string, Color>(); public Color SelectedColor { get; private set; } public Cololrs() { InitializeComponent(); map.Add("Красный", Colors.Red); // Здесь все остальные цвета map.Add("Желтый", Colors.Yellow); } public void RadioButton_Checked(object sender, RoutedEventArgs e) { RadioButton pressed = (RadioButton)sender; MessageBox.Show(pressed.Content.ToString()); SelectedColor = map[pressed.Content.ToString()]; } }
Не проверял, но вроде все правильно. Теперь в главной форме можно обращаться к свойств SelectedColor для получения цвета выбранного в дочерней форме.- Предложено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 5 сентября 2017 г. 7:05
- Помечено в качестве ответа ZhukVl 5 сентября 2017 г. 14:40
5 сентября 2017 г. 5:41Отвечающий -
Спасибо, но Dictionary же коллекцией является)), а вы выше написали поле5 сентября 2017 г. 9:34
-
Я написал, что поле типа Dictionary :)
А, да, его по хорошему на private сделать.
5 сентября 2017 г. 10:04Отвечающий -
Спасибо, теперь понял)5 сентября 2017 г. 10:05
-
А как подобное сделать не для Color, а для Brush?5 сентября 2017 г. 10:12
-
Во-первых, вы можете в форме использующей Color добавить new SolidColorBrush(colors.SelectedColor)
Во-вторых, можно заменить в моем примере Color на Brush, а в конструкторе добавлять не цвета, а кисти.
- Помечено в качестве ответа ZhukVl 5 сентября 2017 г. 14:40
5 сентября 2017 г. 10:38Отвечающий -
Спсасибо за помощь), а как для класса System.Windows.Shapes.Path свойства StrokeThickness?5 сентября 2017 г. 14:39