none
Метод для возврата цвета RRS feed

  • Вопрос

  • Здравствуйте! Как написать метод, возвращающий цвет из данного диалогового окна?

    Код 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 для получения цвета выбранного в дочерней форме.
    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 будет возвращать цвет. Если что-то не получится, задавайте вопросы.

    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 для получения цвета выбранного в дочерней форме.
    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