powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Невозможно установить имя элемента
15 сообщений из 15, страница 1 из 1
Невозможно установить имя элемента
    #37009514
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<ui:JournalForm x:Class="VikiGroup.VKСustoms.FormPlugins.Core.Permissions.Users.WPFUsersList"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:ui="clr-namespace:VikiGroup.UI.Core.Forms.WPF;assembly=VikiGroup.UI"
    xmlns:uc="clr-namespace:VikiGroup.UI.Core.Controls.WPF;assembly=VikiGroup.UI"
    xmlns:ucc="clr-namespace:VikiGroup.UI.Core.Controls.WPF.Columns;assembly=VikiGroup.UI"
    Height="600" Width="800" Title="Журнал пользователей">
    <Grid>
        <uc:ListFormControl x:Name="lfControl" IsShowDeletedVisible="True" CT_ExportToWordVisible="False" DT_ClientFilterVisible="False" DT_UndeleteVisible="False" DT_DocumentBindingVisible="False">

            <uc:ListFormControl.FilterPath>
                <uc:VKLabel Width="100">Логин:</uc:VKLabel>
                <uc:VKTextBox x:Name="vtbLogin" Width="220" Height="22"></uc:VKTextBox>
            </uc:ListFormControl.FilterPath>

           <uc:ListFormControl.Columns>
                <ucc:VKTextColumn Header="Логин" IsReadOnly="True" Width="120" Binding="{Binding Path=Login}"></ucc:VKTextColumn>
                <ucc:VKTextColumn Header="ФИО" IsReadOnly="True" Width="220" Binding="{Binding Path=FIO}"></ucc:VKTextColumn>
                <ucc:VKCheckBoxColumn Header="Заблокирован" IsReadOnly="True" Width="100" Binding="{Binding Path=IsBlocked}"></ucc:VKCheckBoxColumn>
            </uc:ListFormControl.Columns>
        </uc:ListFormControl>
    </Grid>
</ui:JournalForm>

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        public static readonly DependencyProperty FilterPathProperty
         = DependencyProperty.Register(
           "FilterPath",
           typeof(ObservableCollection<UIElement>),
           typeof(ListFormControl),
           new PropertyMetadata(new ObservableCollection<UIElement>())
         );

        public ObservableCollection<UIElement> FilterPath
        {
            get
            {
                return (ObservableCollection<UIElement>)GetValue(FilterPathProperty);
            }
        } 

авторError 107 Cannot set Name attribute value 'vtbLogin' on element 'VKTextBox'. 'VKTextBox' is under the scope of element 'ListFormControl', which already had a name registered when it was defined in another scope. Line 18 Position 35.

Элемент vtbLogin уникальный, в 'ListFormControl' его точно нет.

Может есть нормальный способ делать вставки xaml в usercontrol?

Берегитесь, чтобы кто не прельстил вас. Ибо многие придут под именем Моим, и будут говорить: 'Я Морж', и многих прельстят.
...
Рейтинг: 0 / 0
Невозможно установить имя элемента
    #37009667
Denis Gladkikh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хнык,

Проблему не понял, но вижу маленький, но значительный баг в объявлении DependencyProperty, вы там задали дефолтное значение
Код: plaintext
new PropertyMetadata(new ObservableCollection<UIElement>())
Так вот, этот код регистрирующий DependencyProperty вызовется всего один раз (статическое поле), потому все созданные ListFormControl будут иметь одну и ту же коллекцию элементов (один и тот же объект) ObservableCollection<UIElement> по умолчанию. Соответственно измените в одном месте, поменяется в другом.

Подозреваю, что это и есть корень проблемы, только не очень понятно что тут вообще происходит.

Проблему можно побороть, например, в конструкторе ListFormControl устанавливайте это свойство сами
Код: plaintext
1.
2.
3.
4.
public ListFormControl()
{
  FilterPath = new ObservableCollection<UIElement>();
}

а так как set у вас нет, то можно и через SetValue(...).
...
Рейтинг: 0 / 0
Невозможно установить имя элемента
    #37009751
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis GladkikhХнык,

Проблему не понял, но вижу маленький, но значительный баг в объявлении DependencyProperty, вы там задали дефолтное значение
Код: plaintext
new PropertyMetadata(new ObservableCollection<UIElement>())
Так вот, этот код регистрирующий DependencyProperty вызовется всего один раз (статическое поле), потому все созданные ListFormControl будут иметь одну и ту же коллекцию элементов (один и тот же объект) ObservableCollection<UIElement> по умолчанию. Соответственно измените в одном месте, поменяется в другом.
Спасибо за замечание.

Я хочу иметь возможность в UserControl указать область для контента задаваемого по месту использования. Т.е., например, в UserControl сделать панель, а наполнять её в форме. Вроде как на хабре что-то подобное проскакивало, немного позже более пристально посмотрю.
...
Рейтинг: 0 / 0
Невозможно установить имя элемента
    #37012561
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бага давняя и неприятная. Добавлю интерфейс IWPFNameErrorHack для задания имени и буду по нему получать контролы.
...
Рейтинг: 0 / 0
Невозможно установить имя элемента
    #37018951
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
<ui:JournalForm x:Class="FormPlugins.Core.Permissions.Users.WPFUsersList"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:ui="clr-namespace:UI.Core.Forms.WPF;assembly=UI"
    xmlns:uc="clr-namespace:UI.Core.Controls.WPF;assembly=UI"
    xmlns:ucc="clr-namespace:UI.Core.Controls.WPF.Columns;assembly=UI"
    Height="600" Width="800" Title="Журнал пользователей">

    <ui:JournalForm.Resources>
        <Grid x:Key="dtPath" Height="40" Width="150" Margin="0 0 10 0" HorizontalAlignment="Right">
            <uc:VKLabel Width="100">Логин:</uc:VKLabel>
            <uc:VKTextBox x:Name="vtbLogin" Width="220" Height="22"></uc:VKTextBox>
        </Grid>
    </ui:ListForm.Resources>

    <uc:ListFormControl x:Name="lfControl" IsShowDeletedVisible="True" CT_ExportToWordVisible="False" DT_ClientFilterVisible="False" DT_UndeleteVisible="False" DT_DocumentBindingVisible="False">

        <uc:ListFormControl.FilterPath>
             <ContentControl Content="{StaticResource dtPath}"></ContentControl>
        </uc:ListFormControl.FilterPath>

       <uc:ListFormControl.Columns>
            <ucc:VKTextColumn Header="Логин" IsReadOnly="True" Width="120" Binding="{Binding Path=Login}"></ucc:VKTextColumn>
            <ucc:VKTextColumn Header="ФИО" IsReadOnly="True" Width="220" Binding="{Binding Path=FIO}"></ucc:VKTextColumn>
            <ucc:VKCheckBoxColumn Header="Заблокирован" IsReadOnly="True" Width="100" Binding="{Binding Path=IsBlocked}"></ucc:VKCheckBoxColumn>
        </uc:ListFormControl.Columns>
    </uc:ListFormControl>

</ui:JournalForm>

Вынес в ресурсы и забиндил контент, теперь не ругается.
...
Рейтинг: 0 / 0
Невозможно установить имя элемента
    #37019642
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, как вариант - вынести в контролы. Не для всех случаев годно и биндинг работает криво. :(
...
Рейтинг: 0 / 0
Невозможно установить имя элемента
    #37020040
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@автор

предлагаю попробовать задавать имя не через "x:Name" а через "Name", в контроле реализовать механизм поиска контрола по имени (метод), который потом вы можете использовать в других формах для заполнения.
...
Рейтинг: 0 / 0
Невозможно установить имя элемента
    #37020084
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уТКа,

Так и сделал. Но неудобно, всё равно. Приходится объявлять константы с именами контролов. Думаю небольшой плагинчик дописать, который будет синхронизировать эти константы со списком контролов. Но это всё один большой костыль.
...
Рейтинг: 0 / 0
Невозможно установить имя элемента
    #37020284
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
ХныкуТКа,

Так и сделал. Но неудобно, всё равно. Приходится объявлять константы с именами контролов. Думаю небольшой плагинчик дописать, который будет синхронизировать эти константы со списком контролов. Но это всё один большой костыль.

А зачем усложнять себе жизнь с помощью костылей?
...
Рейтинг: 0 / 0
Невозможно установить имя элемента
    #37020292
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i,

Какие варианты?
...
Рейтинг: 0 / 0
Невозможно установить имя элемента
    #37020419
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
Вместо одного контрола на все случаи жизни - композиция из панели с кнопками(ее можно сделать общей для всех форм) и контролов для списков. Логику вынести в базовый класс ViewModel
...
Рейтинг: 0 / 0
Невозможно установить имя элемента
    #37020468
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i,

Это не контрол на все случаи жизни. Контрол представляет собой грид, панельки для работы с ним и области для вставки фильтров, доп. панелек и т.д. Логика работы с подобными контролами уже есть в базовых формах. Т.к. фильтры регистрируются по названию контролов, их всё равно нужно знать. Хотя, можно сделать фильтрсервис и регистрировать их прямо из xaml, но проблемы получения значений фильтров это не решает.
...
Рейтинг: 0 / 0
Невозможно установить имя элемента
    #37020706
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хнык,

предлагаю использовать вместо
авторnew ObservableCollection<UIElement>()

вот это
авторPanel

т.к. именно на нам основан Grid в который можно пихать UIElement-ы
...
Рейтинг: 0 / 0
Невозможно установить имя элемента
    #37020849
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уТКа,

Спасибо, так и сделаю. :)
...
Рейтинг: 0 / 0
Невозможно установить имя элемента
    #37021333
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хнык,

думаю зе бест - будет сделать так же как в Грид-е, унаследоваться от Panel и не мучиться с DependencyProperty.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Невозможно установить имя элемента
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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