Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778

Разница между просто Ellipse и Ellipse который лежит основе User Control

03.01.2019, 11:42. Показов 3285. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
с Новым Годом и привет всем!

Пробую создать User Control в основе его пока только Ellipse.
Сам Ellipse потерял свое свойство Fill.

Как вернуть?

Я конечно понимаю, что он уже не просто Ellipse, но мне нужно это свойство.

XML
1
2
3
4
5
6
7
8
<UserControl
    
    <Grid>
        <Ellipse
            Width="17"
            Height="17"
            Stroke="Black" Fill=" здесь мне нужно к чему-то общему привязаться"/> 
</UserControl>
Добавлено через 56 минут
В MainWindow.xaml

XML
1
2
3
4
5
6
7
8
 <Ellipse
            Width="17"
            Height="17"
            Margin="29,107,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            Fill="{Binding HighValue, Converter={StaticResource BooleanToBrushConverter}}"  Stroke="Black" />
//этого я не могу сделать, т.к. отсутвует свойство Fill
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.01.2019, 11:42
Ответы с готовыми решениями:

Вопрос по рисованию ellipse. Динамическое изменение координат ellipse
Привет всем!!! В page.xaml создал ellipse, а в page.xaml.cs пытаюсь указать координаты расположения эллипса ellipse.margin.left = massive;...

Какая разница между Web server control, Composite control и User Control
Подскажите, пожалуйста, какая разница между Web server control, Composite control и User Control, а то я ща тут наделаю делов)

Ellipse
Ошибка в конструктор без параметров. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; class...

35
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
04.01.2019, 12:03
Студворк — интернет-сервис помощи студентам
Bulky, честно говоря, наблюдаю за этой темой и никак не пойму, а зачем Вам это?
На мой взгляд, применение UC в данном случае очень и очень избыточно.
Своего стиля для Ellipse с головой хватит.
UC имеет смысл делать, когда это сложное сочетание элементов и или элемент с новым поведением - если это невозможно сделать через стили и шаблоны. Но Ваш пример гораздо проще.
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
04.01.2019, 13:03  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Bulky, честно говоря, наблюдаю за этой темой и никак не пойму, а зачем Вам это?
На мой взгляд, применение UC в данном случае очень и очень избыточно.
Своего стиля для Ellipse с головой хватит.
UC имеет смысл делать, когда это сложное сочетание элементов и или элемент с новым поведением - если это невозможно сделать через стили и шаблоны. Но Ваш пример гораздо проще.
Оу, да я под "колпаком". Ну я, это тот случай, когда полезно.

Элд Хасп, как всегда начинаю от простого к сложному. В конечном итоге хочу получить довольно сложный UC, в будущем их много придется "лепить" в MainWindow и буду "продавать" оболтусам "одноклюшникам".))

Рядовой, Элд Хасп если интересно то...

Подглядел у "буржуев" как:

User Control XAML:

XML
1
2
3
4
5
6
7
8
9
10
 x:Name="UserControl_Ellipse"
 
<Grid>
        <Ellipse
            Width="17"
            Height="17"
            Fill="{Binding Ellipse_Fill, ElementName= UserControl_Ellipse, Converter={StaticResource BooleanToBrushConverter} }"
            Stroke="Black" />
 
    </Grid>

User Control Code Behind:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 public partial class UC_Ellipse : UserControl
    {
        public UC_Ellipse()
        {
            InitializeComponent();
        }
 
 
        public bool UC_Ellipse_Fill
        {
            get { return (bool)GetValue(UC_Ellipse_FillProperty); }
            set { SetValue(UC_Ellipse_FillProperty, value); }
        }
 
        // Using a DependencyProperty as the backing store for UC_Ellipse_Fill.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty UC_Ellipse_FillProperty =
        DependencyProperty.Register("UC_Ellipse_Fill", typeof(bool), typeof(UC_Ellipse), new PropertyMetadata(false));

MainWindow.xaml где физически находится экземпляр самого User Control.

XML
1
<Controls1:UC_Ellipse  UC_Ellipse_Fill="{binding feedback}"/>
T.e., например, "прилетает" feedback = true, передается в свойство UC_Ellipse_Fill, из UC_Ellipse_Fill передается через соответсвующий Converter в родное свойство Fill. Ellipse закрашивается в соответствии с кодом в Converter.

...to be continued. Т.е. сейчас немного облагорожу данное "творение" и выползу с новым "геморроем" в этой ветке. )

Bulky

Добавлено через 11 минут
Собственно что именно подглядел у "буржуев". Так-то я делал все по фэншую.

В этом коде:


Во-первых нужно было дать UC какой-нибудь x:Name.
Во-вторых обратиться в Binding вот так:
XML
1
Fill="{Binding Ellipse_Fill, ElementName= UserControl_Ellipse, Converter={StaticResource BooleanToBrushConverter} }"
т.е. использовать x:Name.

и тогда заработало.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
04.01.2019, 20:06
Цитата Сообщение от Bulky Посмотреть сообщение
Подглядел у "буржуев" как:
Вы что-то не то подглядели. В указанном примере свойство привязанностей не совпадает по типу со свойством элемента.

Полная реализация должна делаться через свойство зависимостей UC, но это свойство зависимостей должно быть того же типа
CB UC
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
namespace Cs_WPF
{
    /// <summary>
    /// Логика взаимодействия для UC_Ellipse.xaml
    /// </summary>
    public partial class UC_Ellipse : UserControl
    {
        public UC_Ellipse()
        {
            InitializeComponent();
        }
 
 
        /// <summary>>Свойство для Elipse.Fill</summary>
        public Brush Fill
        {
            get { return (Brush)GetValue(FillProperty); }
            set { SetValue(FillProperty, value); }
        }
        public static readonly DependencyProperty FillProperty =
            DependencyProperty.Register("FillProperty", typeof(Brush), typeof(UC_Ellipse), new PropertyMetadata(Colors.Aqua));
 
    }
}
XAML UC
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<UserControl x:Class="Cs_WPF.UC_Ellipse"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Cs_WPF"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">
        <Grid>
            <Ellipse
            Width="17"
            Height="17"
            Stroke="Black" Fill="{Binding Fill, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:UC_Ellipse}}}"/>
        </Grid>
</UserControl>
XAML примера использования
XML
1
        <local:UC_Ellipse Fill="Red"/>
Во многих случая достаточно просто "вытянуть" свойство вложенного элемента на уровень UC. Но такой приём не всегда годится.
C#
1
2
3
4
5
6
7
8
9
10
namespace Cs_WPF
{
    /// <summary>Логика взаимодействия для UC_Ellipse.xaml</summary>
    public partial class UC_Ellipse : UserControl
    {
        public UC_Ellipse() { InitializeComponent(); }
        /// <summary>Свойство для Elipse.Fill</summary>
        public Brush Fill { get => PART_Elipse.Fill; set => PART_Elipse.Fill = value; }
    }
}
XML
1
2
3
4
5
6
        <Grid>
            <Ellipse x:Name="PART_Elipse" 
            Width="17"
            Height="17"
            Stroke="Black"/>
        </Grid>
Можно целиком элемент "вытянуть" на уровень UC
C#
1
2
3
4
5
6
7
8
9
10
namespace Cs_WPF
{
    /// <summary>Логика взаимодействия для UC_Ellipse.xaml</summary>
    public partial class UC_Ellipse : UserControl
    {
        public UC_Ellipse() { InitializeComponent(); }
        /// <summary>Свойство для Elipse.Fill</summary>
        public Ellipse Ellipse { get => PART_Elipse; set => PART_Elipse = value; }
    }
}
Можно так же сделать и через свойства зависимостей. И тогда все свойства вложенного Ellipse будут доступны.

Но, обратите внимание, в любом случае свойство UC должно по типу совпадать со свойством с которым оно сопрягается внутри UC.

В Ваших же примерах, идёт какая-то непонятная связь между свойствами типа bool и типа Brush.
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
04.01.2019, 20:14  [ТС]
Элд Хасп,

Спасибо ознакомлюсь.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
В Ваших же примерах, идёт какая-то непонятная связь между свойствами типа bool и типа Brush.
Нормальное явление. Boolean управляет Brush, используется конвертер 'BooleanToBrush'. Там в XAML есть упоминание в ресурсах.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
04.01.2019, 20:28
Цитата Сообщение от Bulky Посмотреть сообщение
Нормальное явление. Boolean управляет Brush, используется конвертер 'BooleanToBrush'. Там в XAML есть упоминание в ресурсах.
Это как раз таки НЕНОРМАЛЬНОЕ явление. А очень специфическое и ограниченное.

Добавлено через 4 минуты
BooleanToBrushConverter - осуществляет переключение между двумя ЗАРАНЕЕ ЗАДАННЫМИ цветами. Он не позволяет привязывать ЛЮБОЙ цвет.
Вам это надо?
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
04.01.2019, 20:35  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Это как раз таки НЕНОРМАЛЬНОЕ явление. А очень специфическое и ограниченное.
сравнивать НЕНОРМАЛЬНОЕ и CПЕЦИФИЧЕСКОЕ. Это как Мелкое с Мягким сравнивать. Кто-то пишет "Калькулятор", кто-то очередного "Паука", кто-то "1С", кто-то интерфейс "Адронного Коллайдера".

Цитата Сообщение от Элд Хасп Посмотреть сообщение
BooleanToBrushConverter - осуществляет переключение между двумя ЗАРАНЕЕ ЗАДАННЫМИ цветами. Он не позволяет привязывать ЛЮБОЙ цвет.
Вам это надо?
Это у меня уже работает с обеда. Но мне нужно "припаять" туда логику. Я уже в соседней ветке вопрос задал. Уже не знаю что нужно. В процессе осмысления.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
04.01.2019, 21:01
Цитата Сообщение от Bulky Посмотреть сообщение
сравнивать НЕНОРМАЛЬНОЕ и CПЕЦИФИЧЕСКОЕ. Это как Мелкое с Мягким сравнивать. Кто-то пишет "Калькулятор", кто-то очередного "Паука", кто-то "1С", кто-то интерфейс "Адронного Коллайдера".
НОРМАЛЬНОЕ - это типовое для широкого, разнообразного применения.
НЕНОРМАЛЬНОЕ-CПЕЦИФИЧЕСКОЕ - это предназначенное для определённых ситуаций и ограниченного применения.
То есть в данном, случае идёт противопоставление широкого, разнообразного применения и узкого, специфического.
Каким образом Вы проводите аналогию с "Мелкое и Мягким" (то есть несопоставимыми понятиями) - я не понял.
Цитата Сообщение от Bulky Посмотреть сообщение
Я уже в соседней ветке вопрос задал. Уже не знаю что нужно. В процессе осмысления.
Ещё не смотрел.
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
04.01.2019, 21:06  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Каким образом Вы проводите аналогию с "Мелкое и Мягким" (то есть несопоставимыми понятиями) - я не понял.
так в народе говорят...

Добавлено через 1 минуту
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Ещё не смотрел.
Гляньте пожалуйста. Что-то я мысленно не на шутку заплутал. )
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
04.01.2019, 21:18
Цитата Сообщение от Bulky Посмотреть сообщение
так в народе говорят...
Я понимаю это.. Но в народе так говорят о несопоставимых вещах. Поэтому я Вам разъяснил, что, в данном случае, я подразумевал.
Цитата Сообщение от Bulky Посмотреть сообщение
Гляньте пожалуйста. Что-то я мысленно не на шутку заплутал. )
Посмотрел. Но моё впечатление, что Вы не туда полезли.
Вместо осмысления в целом задачи и методов решения, Вы взяли примерно похожую реализацию и пытаетесь её "изнасиловать".
Вы лучше опишите задачу целиком. От имеющихся данных, до их отображения.
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
04.01.2019, 21:44  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вы лучше опишите задачу целиком. От имеющихся данных, до их отображения.
ОК. Сейчас соображу.

Прикол в том, что мне не составило труда это сделать в WinForm.

Есть UC, в нем нужно закрашивать Ellipse в зависимости от состояния трех boolean variables.

Сама логика проста, например, грубо:

C#
1
2
3
if bool A && bool B && C == false; //в value передается Brush.White
if bool A && bool B == true; //  в value передается Brush. Green
If bool C == true // в value передается Brush.Red
Еще есть вопрос откуда лучше брать эти bool A,B,C до VM или после VM.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
04.01.2019, 21:55
Цитата Сообщение от Bulky Посмотреть сообщение
Прикол в том, что мне не составило труда это сделать в WinForm.
То как Вы делали в WF, можно делать и в WPF. Другое дело, что это моветон.
Цитата Сообщение от Bulky Посмотреть сообщение
Сама логика проста:
Вопрос не в логике, а к тому откуда эти переменные. Если это свойства данных, то это одно.
Если это свойства VM, производные от других свойств данных - это другое.

Добавлено через 1 минуту
Bulky, И прекращайте работать с полями, а не свойствами. Поля можно использовать только для методов внутри класса. То есть, по факту, поля всегда должны быть private.
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
04.01.2019, 22:01  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если это свойства VM, производные от других свойств данных - это другое.
Например если брать по эту сторону VM (та которая ближе к XAML), пусть это будет bool A.
C#
1
2
3
4
5
6
 public bool DB2_Value11
        {
            get { return _db2_value11; }
            set { Set(ref _db2_value11, value); }
        }
        private bool _db2_value11;
Как с ней работать в конвертере?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
04.01.2019, 22:15
Цитата Сообщение от Bulky Посмотреть сообщение
Например если брать по эту сторону VM (та которая ближе к XAML), пусть это будет bool A.
Вы читали, насколько я помню, мои посты о том как надо реализовывать WPF решения.
Сначала делается Модель, потом Представление. И только на третьем этапе Модель-преставления.
У Меня же складывается впечатление, что Вы данную задачу начали с третьего этапа - с Модели-представления.
Поэтому, мы никак не можем понять друг друга.

Если это свойства присущие Модели, то обычно удобнее делать это через триггера или мультиконвертор.
Если это производные от Модели свойства Модели-представления, то можно сразу в VM вычислить нужные свойства.
Но в Вашем примере реализации свойства DB2_Value11 - вообще, бедлам!
Если это "по эту сторону VM (та которая ближе к XAML)", то где реализация INPC? Что это за непонятный метод Set ?
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
04.01.2019, 22:29  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Что это за непонятный метод Set ?
"Запускает" property changed event.

Добавлено через 7 минут
Элд Хасп, Что бы не бегать туда-сюда. Закройте плиз ветку.
0
04.01.2019, 22:51

Не по теме:

Цитата Сообщение от Bulky Посмотреть сообщение
Что бы не бегать туда-сюда. Закройте плиз ветку.
Чтобы не бегать туда-сюда ведите обсуждение в одной ветке. Темы по просьбам пользователей не закрываются.

0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
05.01.2019, 08:02  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Чтобы не бегать туда-сюда ведите обсуждение в одной ветке. Темы по просьбам пользователей не закрываются.
Здесь не закрываются. В других местах еще как!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.01.2019, 08:02

Ellipse
Здравствуйте! Нужно поместить на форму вложенные эллипсы после нажатия на кнопку. Центр эллипсов совпадает с центром формы, а пропорции —...

сглаживание ellipse
Доброго времени , коллеги! Такой еще вопрос. Как решить вопрос сглаживания ellipse ...

Текст в Ellipse
Добрый день. Скажите пожалуйста, каким образом можно добавить надпись, текст, в геометрическую фигуру Ellipse, Rectangle и т.д. Заранее...

функция ellipse
скажите пожалуйста, есть ли какие нибудь аналоги эллипса, или хитрости в нём, что бы рисовать имея дробные координаты?

Создать класс Ellipse
Создать класс Ellipse, содержащий следующие элементы: - поле «центр» Point* Center; - поле «малый радиус» float a; - поле «большой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru