Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/27: Рейтинг темы: голосов - 27, средняя оценка - 4.93
 Аватар для HIMen
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342

Прoблемы с созданием своего контрола wpf

12.12.2009, 23:42. Показов 5020. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пробую создать свой контрол UserControl1 : UserControl
вот код
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<UserControl
    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"
    mc:Ignorable="d"
    x:Class="WpfApplication1.UserControl1"
    x:Name="UserControl"
    d:DesignWidth="100" d:DesignHeight="44.667" Height="20">
    <UserControl.Resources>
        <Storyboard x:Key="OnMouseEnter1">
            <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="checkBox" Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)">
                <SplineColorKeyFrame KeyTime="00:00:00" Value="#FF0085C8"/>
                <SplineColorKeyFrame KeyTime="00:00:00.4000000" Value="#FF00C885"/>
            </ColorAnimationUsingKeyFrames>
            <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="ellipse" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[2].(GradientStop.Color)">
                <SplineColorKeyFrame KeyTime="00:00:00" Value="#0000C885"/>
                <SplineColorKeyFrame KeyTime="00:00:00.4000000" Value="#7F00C885"/>
            </ColorAnimationUsingKeyFrames>
        </Storyboard>
        <Storyboard x:Key="OnMouseLeave1">
            <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="checkBox" Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)">
                <SplineColorKeyFrame KeyTime="00:00:00" Value="#FF00C885"/>
                <SplineColorKeyFrame KeyTime="00:00:00.4000000" Value="#FF0085C8"/>
            </ColorAnimationUsingKeyFrames>
            <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="ellipse" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[2].(GradientStop.Color)">
                <SplineColorKeyFrame KeyTime="00:00:00" Value="#7F00C885"/>
                <SplineColorKeyFrame KeyTime="00:00:00.4000000" Value="#0000C885"/>
            </ColorAnimationUsingKeyFrames>
        </Storyboard>
    </UserControl.Resources>
    <UserControl.Triggers>
        <EventTrigger RoutedEvent="Mouse.MouseEnter">
            <BeginStoryboard Storyboard="{StaticResource OnMouseEnter1}"/>
        </EventTrigger>
        <EventTrigger RoutedEvent="Mouse.MouseLeave">
            <BeginStoryboard x:Name="OnMouseLeave1_BeginStoryboard" Storyboard="{StaticResource OnMouseLeave1}"/>
        </EventTrigger>
    </UserControl.Triggers>
    <Grid x:Name="LayoutRoot" Height="20">
        <Ellipse x:Name="ellipse" Stroke="Black" StrokeThickness="0" Margin="-50,0">
            <Ellipse.Fill>
                <RadialGradientBrush>
                    <GradientStop Color="#5427B10A"/>
                    <GradientStop Color="#00000000" Offset="1"/>
                    <GradientStop Color="#0000C885"/>
                </RadialGradientBrush>
            </Ellipse.Fill>
        </Ellipse>
        <CheckBox x:Name="checkBox" Content="CheckBox" Foreground="#FF0085C8"/>
    </Grid>
</UserControl>
Затем добавляю его на главную форму
XML
1
<local:UserControl1 x:Name="MyCheckBox1" Margin="8,8,0,0" VerticalAlignment="Top" Height="20" HorizontalAlignment="Left" Width="94.768"/>
Как мне изменить в этом контроле свойство Content у checkBox?
Из кода c# можно так:
C#
1
MyCheckBox1.checkBox.Content="wwwwww";
Как сделать тоже самое из XAML?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.12.2009, 23:42
Ответы с готовыми решениями:

Создание своего контрола
Создал в проекте папку rcontrols, в ней создал класс radioInTest namespace ProjectWPF2.rcontrols { public class...

Способы создания своего контрола
Хочу создать универсальный контрол который буду использовать в нескольких проектах в будущем. Сам контрол - изображение с титулом, текстом,...

Создать рамку вокруг своего контрола
Как создать рамку вокруг своего контрола для удобства его расположения в окне, чтобы при запуске программы эта рамка исчезла?

3
 Аватар для Sayrus89
32 / 32 / 7
Регистрация: 26.10.2009
Сообщений: 98
13.12.2009, 17:56
Мне на ум приходит создание свойства зависимостей (DependencyProperty) Caption со всеми вытекающими последствиями. Если нужно объяснить поподробнее - сообщи
0
 Аватар для HIMen
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
13.12.2009, 19:30  [ТС]
Нет, я придумал по-другому, буду наследовать от CheckBox, но тогда приходиться каждый раз вручную изменять файл MyCheckBox.g.cs, там почему-то каждый раз при компиляции снова прописывается наследование от UserControl.
Как этого избежать?

Добавлено через 26 минут
Все, уже разобрался
0
PenSpinner
22.12.2009, 17:13
Цитата Сообщение от Sayrus89 Посмотреть сообщение
Мне на ум приходит создание свойства зависимостей (DependencyProperty) Caption со всеми вытекающими последствиями. Если нужно объяснить поподробнее - сообщи
Да, объясни - я создаю свой контрол и столкнулся с такой же задачей.

Я пишу программу для визуализации алгоритма Дейкстры - хочу создать свой контрол вершина и ребро.

вот код контрола веришна:
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
25
<UserControl x:Class="GraphControlLibrary.Node"
             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" 
             mc:Ignorable="d" 
             d:DesignHeight="30" d:DesignWidth="30">
    <UserControl.Resources>
        <Style TargetType="{x:Type TextBox}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TextBox}">
                        <Grid>
                            <Ellipse Height="25" Width="25" StrokeThickness="1" Fill="Lime"></Ellipse>
                            <ScrollViewer VerticalAlignment="Center" HorizontalAlignment="Center" Content="{TemplateBinding Text}" /> //не знаю правильно ли тут Content задано
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </UserControl.Resources>
 
        <TextBox Height="25" Width="25" MaxLength="2"></TextBox>
 
</UserControl>
я, конечно, понимаю, что можно было просто изменить шаблон TextBox'a, но в момент начала разработки я решил разобраться в вопросе создания свойств зависимостей, потому и создал новый контрол.
К тому же еще надо сделать ребро, там изменением шаблона не обойдется.
Т.е. я хочу иметь:
C#
1
2
3
4
Node VisualNode = new Node();
            VisualNode.Margin = new Thickness(node1.p.X, node1.p.Y, node1.p.X + 30, node1.p.Y + 30);
            VisualNode.Text = node1.Label;
            Canvas_Graph.Children.Add(VisualNode);
вот как я оформил свойство:
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
25
26
27
    public partial class Node : UserControl
    {
        public static readonly DependencyProperty TextProperty;
 
        public Node()
        {
            InitializeComponent();
        }
 
        static Node()
        {
            String s = "v";
            FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata(s, FrameworkPropertyMetadataOptions.AffectsMeasure);
            TextProperty = DependencyProperty.Register("Text", typeof(String), typeof(FrameworkElement), metadata, new ValidateValueCallback(ValidateTextValue));
        }
 
        private static bool ValidateTextValue(object value)
        {
            return true;
        }
 
        public String Text
        {
            set { SetValue(TextProperty, value); }
            get { return (String)GetValue(TextProperty); }
        }
    }
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.12.2009, 17:13
Помогаю со студенческими работами здесь

Импорт своего контрола в другой проект (Silverlight)
Собрал простенький проект в виде текстового редактора и пары кнопок, выделения вставки и т.п. Подскажите пожалуйста как в дальнейшем его...

Анимация контрола в WPF
Еще раз добрый день господа! опять возник ламерский вопрос. Имеется контрол с тремя положениями (в зависимости от положения...

Обращение к элементу UI своего контрола-наследника из xaml другого класса
Создаю свой контрол - наследник от Grid в коде .cs В своём контроле добавляется TextBox Вопрос: как сделать так, чтобы обращение к...

WPF, MVVM, сложная логика контрола
Какие механизмы есть в WPF, чтобы оставаясь в рамках MVVM иметь возможность реализации сложной логики взаимодействия с контролами View? ...

Создание своего контрола на основе существующего. Не могу правильно задать пространство имён
WPF. К контролам предъявляются примерно одинаковые требования. В общем, надоело писать кучу свойств каждый раз, решил создать свои,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru