powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как в UserControl отследить событие из Parent-окна?
5 сообщений из 5, страница 1 из 1
Как в UserControl отследить событие из Parent-окна?
    #39405541
Vladimir2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В окне создал Checkbox C1 и UserControl, в котором только контрол Checkbox C2.
Как в xaml разметке UserControl'а в С2 отследить изменение свойства IsChecked у С1?
...
Рейтинг: 0 / 0
Как в UserControl отследить событие из Parent-окна?
    #39405824
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir2008,

Можно найти элемент через LogicalTreeHelper, через VisualTreeHelper, через FindName, через GetTemplatePart (если через про шаблон элемента управления, в самом элементе управления), в Binding это Reference, ElementName и др, но они не очень подходят

В данном примере есть TextBlock и UserControl находящиеся на 1 уровне, в UserControl есть TextBox.
в TextBlock показано, как можно забиндиться на свойство Text контрола TextBox, который вложен в UserControl.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    public class FindElement : MarkupExtension
    {
        private readonly string  _name;
        public FindElement (string name)
        {
            _name = name;
        }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            var rootObjectProvider = (IRootObjectProvider)serviceProvider;
            var root = rootObjectProvider.RootObject as DependencyObject;
            if (root == null) throw new NullReferenceException(nameof(root));
            var findElement = LogicalTreeHelper.FindLogicalNode(root, "PART_TextBlock");
            return findElement;
        }
    }


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<Window x:Class="FindName_MarkupExtension.MainWindow"
        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:FindName_MarkupExtension"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <local:MyUserControl/>
        <TextBlock Text="{Binding Text, Source={local:FindElement PART_TextBlock}}"/>
    </StackPanel>
</Window>



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<UserControl x:Class="FindName_MarkupExtension.MyUserControl"
             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:FindName_MarkupExtension"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <StackPanel>
            <TextBox x:Name="PART_TextBlock"/>
        </StackPanel>
    </Grid>
</UserControl>
...
Рейтинг: 0 / 0
Как в UserControl отследить событие из Parent-окна?
    #39405847
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для IsChecked пример аналогичный,
и работая с WPF стоит забыть про событийную модель WinForms, в WPF события не особо нужны в процессе вёрстки интерфейса.
По большей части они нужны только при создании или изменении существующих элементов управления и в отличии от WinForms (по большей части) используют маршрутизируемые события.
...
Рейтинг: 0 / 0
Как в UserControl отследить событие из Parent-окна?
    #39406172
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir2008,

А может через модель эту задачу решить? Она отследит изменения, а потом сообщит кому следует...
...
Рейтинг: 0 / 0
Как в UserControl отследить событие из Parent-окна?
    #39406256
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class FindElement : MarkupExtension
    {
        private readonly string  _name;
        public FindElement (string name)
        {
            _name = name;
        }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            var rootObjectProvider = (IRootObjectProvider)serviceProvider;
            var root = rootObjectProvider.RootObject as DependencyObject;
            if (root == null) throw new NullReferenceException(nameof(root));
            var findElement = LogicalTreeHelper.FindLogicalNode(root, _name);
            return findElement;
        }
    }


сори, затупил
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как в UserControl отследить событие из Parent-окна?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]