русский
Germany.ruForen → Архив Досок→ Programmierung

WPF - требуется ИИ, можно с детьми

441  1 2 alle
AlexNek патриот27.12.17 20:46
AlexNek
27.12.17 20:46 

Что то народ теорией стал развлекаться. Есть более приземленная задачка.


Есть XAML в котором имется следующая часть, пока только с одним элементом

<local:Toolbox ItemSize="80, 60">
   <ItemsControl.Items>
      <Grid >
        некоторое количество элементов
      </Grid >
   <ItemsControl.Items>
</local:Toolbox>

Требуется/хочется переместить элемент в ResourceDictionary.

С копированием проблем нет, но как использовать этот элемент из ресурсов?

<local:Toolbox ItemSize="80, 60">
   <ItemsControl.Items>
      <??? ="{StaticResource Имя}" >
   <ItemsControl.Items>
</local:Toolbox>

Хотелось бы сохранять именно только один элемент списка по отдельности, не весь список.

Один элемент списка достаточно сложный объект и хочется его иметь в отдельном файле ресурсов.

#1 
  moose старожил27.12.17 22:05
NEW 27.12.17 22:05 
in Antwort AlexNek 27.12.17 20:46

недопонятно. что именно вы хотели бы поместить в ResourceDictionary? попробуйте сформулировать ваш вопрос иначе. мне кажется, вы не вполне понимаете, что такое ResourceDictionary и как его можно/нельзя применить. но может, я ошибаюсь. по-крайней мере в том виде, как вопрос задан, я бессилен что-нибудь ответить.

#2 
Murr патриот27.12.17 22:09
Murr
NEW 27.12.17 22:09 
in Antwort AlexNek 27.12.17 20:46

как использовать этот элемент из ресурсов?

-----

Перегрузить источник Итеmсов?

#3 
AlexNek патриот27.12.17 23:21
AlexNek
NEW 27.12.17 23:21 
in Antwort moose 27.12.17 22:05
мне кажется, вы не вполне понимаете, что такое ResourceDictionary и как его можно/нельзя применить.

Я почти уверен что Вы не ошибаетесь. смущ

Пока есть ассоциация только с Винформс и видел, что в WPF очень любят закидывать туда разные стили, кисточки и прочую мелочевку. Объекты тоже попадаются.


Есть допустим, у меня некая механическая деталь, нарисовал я её как то в XAML-е - вот получился некий объект. Этот объект я могу переместить с формы в ресурсы, а потом использовать из кода. В объект где есть Content тоже можно вставить

<Content="{StaticResource Имя}"/>

Получается именно то, что нужно один и тот же объект который можно использовать и в коде и в XAML-е.


#4 
AlexNek патриот27.12.17 23:22
AlexNek
NEW 27.12.17 23:22 
in Antwort Murr 27.12.17 22:09

Из кода сделать нет больших проблем. Загрузил из ресурсов и добавил в Тоолбокс.

Хотелось бы сделать тоже самое из XAMLa

#5 
AlexNek патриот27.12.17 23:27
AlexNek
NEW 27.12.17 23:27 
in Antwort moose 27.12.17 22:05, Zuletzt geändert 28.12.17 00:13 (AlexNek)
что именно вы хотели бы поместить в ResourceDictionary?


Сейчас у меня в ресурсах именно то что было внутри ItemsControl.Items - это отдельный специально подключаемый файл

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid x:Key="Name">
       дофига разных объектов должно быть. Рисуют определенную фигуру
    </Grid>
</ResourceDictionary>


Для теста пока сделано максимально упрощенно. Слева и на "поле" один и тот же объект с несколько разными параметрами. То что слева и есть Toolbox

#6 
Murr патриот28.12.17 00:47
Murr
NEW 28.12.17 00:47 
in Antwort AlexNek 27.12.17 23:22

Избини - ХАМЛ - прошел мимо меня...

#7 
AlexNek патриот28.12.17 01:11
AlexNek
NEW 28.12.17 01:11 
in Antwort Murr 28.12.17 00:47

так мимо меня тоже бы и прошел, просто иногда так получается.

Вот сейчас, чисто нашел себе задание на новогодние каникулы. На Винформс такое лепить совсем не хотелось.

А для WPF как раз самое то, заодно много интересного нашел.

#8 
  moose старожил28.12.17 22:28
NEW 28.12.17 22:28 
in Antwort AlexNek 28.12.17 01:11

возможно, этот линк может послужить вам отправной точкой:


https://stackoverflow.com/questions/22960220/create-a-cont...

#9 
AlexNek патриот28.12.17 23:56
AlexNek
NEW 28.12.17 23:56 
in Antwort moose 28.12.17 22:28

Спасибо - Ответ невозможно

When you define a arbitrary Control in Resources, you can use it in the future in Control which have property Content and derived from Control class. These are the followings: ContentControl, Label, ContentPresenter, etc.

Можно извратиться, но это будет не один и тот же элемент для кода и XMLа

<local:Toolbox ItemSize="80, 60">
                        <ItemsControl.Items>
                            <ContentControl
                               Content="{StaticResource Имя}">
                            </ContentControl>
#10 
  moose старожил29.12.17 10:39
NEW 29.12.17 10:39 
in Antwort AlexNek 28.12.17 23:56, Zuletzt geändert 29.12.17 10:46 (moose)

я все равно не понял вашей конкретной задачи, так что вряд ли смогу вам быть чем-то полезен. вот интересная дискуссия о ContentPresenter'e, если интересно.

https://social.msdn.microsoft.com/Forums/vstudio/en-US/675...

и ищо:

https://dzone.com/articles/what-contentpresenter

#11 
AlexNek патриот29.12.17 14:46
AlexNek
NEW 29.12.17 14:46 
in Antwort moose 29.12.17 10:39
я все равно не понял вашей конкретной задачи

Зато нашли решение glassglassglass. И с наступающим!!!


Задача относительно простая, но есть над чем подумать.

Есть некое 2Д измерительное устройство и есть лист материала определенного размера. Устройство может измерять параметры материала на определенной площади листа под измерительной головкой. Где именно измерять - решает заказчик. Можно измерять как всю поверхность листа (больше 20 точек), так и например в 5 точках (4 - по краям и 1 - в середине) - назовем это планом измерений.

Требуется редактор для создания плана измерения. Что то типа сильно упрощенного визио. Есть достаточно исходников редакторов диаграмм, но все найденные оказались либо слишком сложными либо "дурными". Пришлось искать компромисс.

На картинке в посте ранее слева был так называемый тоолбох, оттуда на "лист" можно перетащить измерительную головку. Определенная точка на головке должна располагаться на пересечении опорных линий (синего цвета, я называю ее сеткой). Когда "план измерений" сделан, его можно записать в файл для последующего использования другими программами. Файл можно также открыть для редактирования.

На сегодняшний момент все основные фунции реализованы. Исправляются ошибки, дополняются возможности. Сейчас вожусь с сеткой - не хочет подлая перерисовываться.

#12 
  moose старожил29.12.17 18:06
NEW 29.12.17 18:06 
in Antwort AlexNek 29.12.17 14:46

в общих чертах понятно. пару приложений где-то есть, которые мог бы для такого взять за прототип, если бы делал вашу задачу. но одна - в WinForms, одна - в Qt (еще одна - в MFC, но это уже не для сегодня).

в винформз очень удобная канва, а в кьюте очень легко двигать объекты, плюс мультиплатформенность сразу (если надо, конечно).

это клиент затребовал тулбокс, или "свое решение"? я бы попроще попытался придумать. вариантов, конечно, большое множество, но можно:

0. создать какой-нибудь интерфейс, где можно было бы наклацать параметры (типа размер заготовки, шаг сетки, способ размещения головок по сетке, ...), и потом по кнопке окэй натыкал бы на канву головки. человек может посмотреть, если не нравится - изменить. или двигать руками (snap to grid etc.)

1. если уже вручную размещать головки, то не таскал бы их из тулбокса (это только таскать легко, а программировать таскание - головнячок), а пусть клацает правой мышкой в точку, где хочет разместить головку, появится меню с одним из п-в "new head" (может еще что-нибудь?), и когда клацнет - головка создается и помещается туда, где клацнул (или в ближайший узел сетки)

2. выбирается где-то (пускай в тулбоксе) кнопка "головка", и пока ее не "отвыберут", клац левой мышей по полю создает головку. можно очень быстро наклацать множество.

3. ...


но вам виднее, я просто накидал того, что вы наверняка уже тоже рассматривали.


да, конечно же с наступающим! : )

(огненная собака, кажется, наступает?)

#13 
AlexNek патриот29.12.17 18:35
AlexNek
NEW 29.12.17 18:35 
in Antwort moose 29.12.17 18:06
но одна - в WinForms

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

Мне подумалось что WPF больше подходит для ентого дела, да и что то интересное нужно было на каникулы.

это клиент затребовал тулбокс, или "свое решение"?

Клиент вообще ничего пока не знает. Написано просто "возможность различного размещения мест измерений" или что то в этом роде.


создать какой-нибудь интерфейс, где можно было бы наклацать параметры

Это в проперти гриде задается и пишется в файл.


Стандартные размещения будут идти в заранее заготовленных файлах.

snap to grid есть, как и авторазмещение на свободном месте поля если объекты перекрываются.

Еще добавлю оптимизация пути перемещения.


Как сделать попроще не сильно думал. Идея была сделать как интересно, а там уж посмотрим.


а программировать таскание - головнячок

никаких проблем не заметил (Thumb)


#14 
  moose старожил29.12.17 21:28
NEW 29.12.17 21:28 
in Antwort AlexNek 29.12.17 18:35, Zuletzt geändert 29.12.17 21:40 (moose)
Как сделать попроще не сильно думал. Идея была сделать как интересно, а там уж посмотрим.

расскажу я вам, наверное, под новый год притчу. вообще это в реальности было. наняла моя фирма "помощника" на стороне. парень очень хороший (как человек), умел очень хорошо обходиться с людьми, поэтому руководителю проекта нравился, и тот позволял ему делать все так, как тому того хотелось. когда я однажды высказал предположение, что его решение задачи сложнее самой задачи, он изрек нечто вроде "ты думаешь, я не в состоянии это с помощью if...then... else... сделать? но мне так - неинтересно!". присутствующий при этом рук. проекта кинул ему восхищенный взгляд и изрек нечто "Х не такой разработчик, как вы все, он - особенный!". я заглох и занялся своим делом: как бы для сложных задач простые решения придумать.

крутил-крутил наш гений, создал нечто, во что всем, кто был рядом, пришлось кроме знаний/опыта в С/С++ еще и в его созданный метаязык и прочую муру врабатываться. но я с этим мало пересекался, и старался по возможности вообще места, где он поваял, обходить стороной. через полгода где-то он откланялся. естественно, никто не лез разбираться в его творчество пока нужды не было. но настал тот час, когда там что-то пошло не так (такое, бывает, случается). пару человек попялились в этот "код", потом сказали, что это - "изнасилование С++","загадки для взрослых", и плюнули. шеф вызвонил гения, тот пришел, попялился полдня в собственный код и со словами "извините, ребята, я, наверное, вас подставил, но я ей-богу ничего здесь понять не могу. сорри!" свалил. уже не помню, как и кто это дерьмо потом разгребал или переделывал, но мораль мне извлекать не нужно было: я и так знал, чем такие вещи обычно заканчиваются.


#15 
dymanoid знакомое лицо29.12.17 21:48
dymanoid
NEW 29.12.17 21:48 
in Antwort AlexNek 27.12.17 20:46
   <ItemsControl.Items>
      <StaticResourceExtension ResourceKey="Имя" />
   <ItemsControl.Items>
#16 
AlexNek патриот29.12.17 21:54
AlexNek
NEW 29.12.17 21:54 
in Antwort moose 29.12.17 21:28

Идея понятна и знакома. Но в данном случае мне было относительно по барабану.

На "каникулах" дома работать смысла нет, а поделать, что интересное и с какой то пользой смысл есть.

Был еще вариант с Юниксом покапаться - Гит на сервере по SSH не хочет опять запускаться, но уже надоело, надо было сделать перерыв.


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

#17 
AlexNek патриот29.12.17 22:19
AlexNek
NEW 29.12.17 22:19 
in Antwort dymanoid 29.12.17 21:48

Работает! Спасибо.

По описанию бы не додумался до ентого

https://docs.microsoft.com/en-us/dotnet/api/system.windows...

#18 
dymanoid знакомое лицо29.12.17 23:01
dymanoid
NEW 29.12.17 23:01 
in Antwort AlexNek 29.12.17 22:19

Вообще там есть это, но не в этой статье, а в одной из ссылок из Remarks.


Ссыль.

См. раздел "XAML Object Element Usage".

#19 
AlexNek патриот29.12.17 23:09
AlexNek
NEW 29.12.17 23:09 
in Antwort dymanoid 29.12.17 23:01

хмм, но тогда возникает вопрос что же пользовать

StaticResource или StaticResourceExtension?

#20 
1 2 alle