XAML. Создание всплывающих подсказок и дополнительной справки для команд
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > XAML. Создание всплывающих подсказок и дополнительной справки для команд

XAML. Создание всплывающих подсказок и дополнительной справки для команд

Ответ
Поиск в этой теме
Непрочитано 24.02.2011, 08:12 #1
XAML. Создание всплывающих подсказок и дополнительной справки для команд
Disney
 
Геодезист
 
Сибирь (где медведи по улицам ходят)
Регистрация: 12.03.2009
Сообщений: 860

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

И тут сегодня случайно набрёл в справке на Пример XAML-файла
Код:
[Выделить все]
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:Autodesk.Windows;assembly=AdWindows">
<src:RibbonToolTip x:Key="MYEH_CMD_0001">
<src:RibbonToolTip.ExpandedContent>
<StackPanel>
<TextBlock Background="AntiqueWhite" TextAlignment="Center">
Создает прямоугольное пометочное облако на слое <Bold>ИЗМЕНЕНИЯ</Bold>.
</TextBlock>
<Image Source="images/rectcloud.jpg" Width="Auto" Height="Auto">
</Image>
</StackPanel>
</src:RibbonToolTip.ExpandedContent>
</src:RibbonToolTip>
<src:RibbonToolTip x:Key="MYEH_CMD_0002">
<src:RibbonToolTip.ExpandedContent>
<StackPanel>
<TextBlock Background="Yellow" TextAlignment="Left">
Создает многоугольное пометочное облако на слое
<Run Text=" ИЗМЕНЕНИЯ " Foreground="Red" FontStyle="Italic"/>
.
</TextBlock>
<Image Source="images/rectcloud.jpg" Width="Auto" Height="Auto">
</Image>
</StackPanel>
</src:RibbonToolTip.ExpandedContent>
</src:RibbonToolTip>
</ResourceDictionary>
И мне абсолютно(пока) не нужно разбираться в самом XAML, меня интересует только два момента:
  1. Форматирование текста
    • где брать имена не стандартных цветов для Foreground
    • какие ещё теги форматирования текста можно использовать
  2. Вставка изображения
    • куда засунуть картинку, и как её прописать в Source, чтоб не использовать полный путь к ней (размещение картинки в путях поиска - не помогло)
    • как вставить анимацию (вставка тупо gif - не работает)

Вложения
Тип файла: flv Вставка.flv (158.2 Кб, 234 просмотров)

__________________
Почему все вдруг становятся умными, когда уже не надо?
Просмотров: 8362
 
Непрочитано 24.02.2011, 08:47
#2
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Offtop: Помнится я ещё год назад это показывал на dwg.ru
Цитата:
Сообщение от Disney Посмотреть сообщение
И мне абсолютно(пока) не нужно разбираться в самом XAML, меня интересует только два момента:
Форматирование текста
где брать имена не стандартных цветов для Foreground
какие ещё теги форматирования текста можно использовать
Вставка изображения
куда засунуть картинку, и как её прописать в Source, чтоб не использовать полный путь к ней (размещение картинки в путях поиска - не помогло)
как вставить анимацию (вставка тупо gif - не работает)
для Foreground, как и для BackGround можно назначать не только обычные цвета, но и кисти (Brush) - это своего рода градиентные заливки (линейная/радиальная). О форматировании текста, если хотите кратко - можете почитать тут (Span, Bold, Italic, e.t.c). Вот ещё линк. Вы можете засунуть во всплывающую подсказку что угодно, границы - ваша фантазия (хоть 3D-интерфейс). Другой вопрос, что автодеск реализовала её так, что размещать на ней элементы управления (например кнопку) бесполезно - при первом же клике подсказка закроется. Кроме того, чтобы нормально размещать содержимое на всплывающей подсказке, нужно понимать, что такое Grid, StackPanel, DockPanel и т.п. - чтобы выбрать наиболее подходящий в той или иной ситуации контейнер размещения (или комбинировать их).

Картинки можно "засовывать" (с) в файлы ресурсов и ссылаться на конкретный ресурс с помощью привязки. Ресурсы можно хранить ещё и в словарях (кстати, в вашем xaml-коде показан именно словарь).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 24.02.2011, 09:29
#3
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от hwd Посмотреть сообщение
Помнится я ещё год назад это показывал на dwg.ru
А я к тебе год назад и обращался с прозьбой научить, ты мне любезно дал пару ссылок, но с наскоку разобраться не получилось, а для "не наскока" производственной необходимости нет.

Цитата:
Сообщение от hwd Посмотреть сообщение
О форматировании текста, если хотите кратко - можете почитать тут
Спасибо, с текстом вроде разобрались, хотя там и без форматирования можно было обойтись.


Цитата:
Сообщение от hwd Посмотреть сообщение
Картинки можно "засовывать" (с) в файлы ресурсов и ссылаться на конкретный ресурс с помощью привязки. Ресурсы можно хранить ещё и в словарях (кстати, в вашем xaml-коде показан именно словарь).
Воооот, а можно с этого места по-подробнее... так и не понял как туда прикрутить анимацию?
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 24.02.2011, 10:28
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Disney Посмотреть сообщение
так и не понял как туда прикрутить анимацию?
не понял тебя... ты хочешь видео засунуть в ресурсы? Зачем? Не проще в сети его выложить и прописать на него ссылку, чтобы оно проигрывалось в твоём xaml?
MSDN:
Цитата:
При распространении мультимедиа с приложением, нельзя использовать файл мультимедиа в качестве ресурса проекта. Вместо этого в файле проекта необходимо задать для типа мультимедиа значение Content и для CopyToOutputDirectory значение PreserveNewest или Always.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 24.02.2011 в 11:35. Причина: добавил ссылку на MSDN
hwd вне форума  
 
Автор темы   Непрочитано 24.02.2011, 12:25
#5
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от hwd Посмотреть сообщение
MSDN:
О работает, даже со звуком
Код:
[Выделить все]
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:Autodesk.Windows;assembly=AdWindows">
<src:RibbonToolTip x:Key="MYEH_MY_0009">
<src:RibbonToolTip.ExpandedContent>
<StackPanel>
 <MediaElement Source="C:\Users\XXX\Documents\dim_reverse.wmv" 
     Width="350" Height="320" />
</StackPanel>
</src:RibbonToolTip.ExpandedContent>
</src:RibbonToolTip>
</ResourceDictionary>


осталось разобраться с хранением ресурсов, чтоб в конечном итоге, безболезненно переносить этот XAML файл с одного ПК на другой
Цитата:
Сообщение от hwd Посмотреть сообщение
Ресурсы можно хранить ещё и в словарях
Не, я же воще не программист, как ресурсы там хранить, даже хранить-то ладно, они сами там будут храниться, как их туда засунуть, и кто такие словари
Вложения
Тип файла: flv Dim_Reverse.flv (422.0 Кб, 167 просмотров)
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 24.02.2011, 12:30
#6
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


>Disney
Версия Windows Media Player у тебя какая? Предполагаю, что выше 9-й. У меня дома версия 11 (кажется) - буквально вчера в WPF видео там прокручивал. На работе у меня 9-я версия - под ней видео в WPF не показывает - нужно обновлять медиаплейр. Вывод - показывает у тебя - не факт, что будет показывать у др. юзеров.

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

п.с.2 обновил на работе плейр с 9 на 10-ю версию - видео стало отображаться. Т.о. те, у кого 9-я версия (а в моём случае - это все мои пользователи) видео так же не увидят, если его отображать через WPF...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 24.02.2011 в 13:08. Причина: добавил п.с.
hwd вне форума  
 
Автор темы   Непрочитано 24.02.2011, 13:10
#7
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


hwd, да тут дело не в Windows Media Player, а в кодеках, как правило помогает смотреть и слушать всё K-Lite Codec Pack
так то мне пофиг, я анимацию могу в любой формат засунуть, в примере по ссылке был WMV, вот я и сделал WMV, где узнать какие ещё можно? Или получается, тупо, что Windows Media Player проигрывает, то и можно вставлять?
А на форум удобно загружать FLV(если размер не большой), их можно просматривать сразу не скачивая, и перематывать или на паузу ставить, в отличи от GIF.

Ты мне лучше расскажи, как ресурсы хранить в словарях.
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 24.02.2011, 14:14
#8
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Disney Посмотреть сообщение
Ты мне лучше расскажи, как ресурсы хранить в словарях.
Ресурсы ресурсам рознь.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 24.02.2011, 16:17
#9
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от hwd Посмотреть сообщение
Ресурсы ресурсам рознь.
Ну не энергоресурсы же... Конечно медиа файлы видео или изображение
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 24.02.2011, 16:56
1 | #10
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Disney Посмотреть сообщение
Ну не энергоресурсы же... Конечно медиа файлы видео или изображение
А я и не имел в виду нефть и уголь... Поясню, почему твоё "конечно" (с) не является единственным вариантом ресурсов:
Вот, на вскидку, словарь ресурсов (xaml-файл):
Код:
[Выделить все]
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:sys="clr-namespace:System;assembly=mscorlib"                                       
                    >
    <!--Определяем линейную градиентную заливку-->
    <LinearGradientBrush x:Key="myBG">
        <LinearGradientBrush.GradientStops>
            <GradientStop Offset="0" Color="Red"/>
            <GradientStop Offset="0.25" Color="Gray"/>
            <GradientStop Offset="0.5" Color="White"/>
            <GradientStop Offset="1" Color="Black"/>
        </LinearGradientBrush.GradientStops>
    </LinearGradientBrush>
    <!--Высота шрифта-->
    <sys:Double x:Key="fontSize">20</sys:Double>
    <!--Относительная ссылка на файл изображения-->
    <BitmapImage x:Key="img" UriSource="./Images/Burro3.png"/>
</ResourceDictionary>
В нём, в качестве ресурсов я определил градиентную кисть, число двойной точности, а так же ссылку на изображение. Помимо них ресурсами можно определять шаблоны, стили, текст, числа, кисти, градиенты и т.п. Всё это так же будет называться ресурсами. В WPF понятие ресурсов значительно шире, чем это понимаешь ты. Понятие "ресурс" в WPF не ограничивается картинками.
Каждый элемент WPF имеет свой словарь, в состав которого можно добавлять как ресурсы, так и подключать уже существующие словари ресурсов. Приведённый выше словарь ты можешь использовать в др. словарях (обрати внимание, что в автокаде в качестве источника справки ты задаёшь объект ResourceDictionary). Можно всё определить в одном словаре, а можно написать общий и использовать его в при построении др. xaml-словарей справок автокада. Пример использования:
Код:
[Выделить все]
<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="246" Width="486">
    <Window.Resources>
        <ResourceDictionary>
            <!--Прежде всего подключаем внешний файл ресурсов (обязательно)-->
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Dictionary1.xaml"/>
            </ResourceDictionary.MergedDictionaries>
            <!--А здесь задаём, для примера, ещё один ресурс-->
            <sys:String x:Key="xxx">Текст из ресурса</sys:String>
        </ResourceDictionary>
    </Window.Resources>    
    <!--Назначаем свойству Background из нашего словаря ресурсов-->
    <Grid Background="{StaticResource myBG}">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="127*" />
            <RowDefinition Height="32*" />
        </Grid.RowDefinitions>
        <!--Назначаем высоту текста из нашего словаря ресурсов-->
        <TextBlock Grid.Row="0" FontSize="{StaticResource fontSize}" Margin="5">
            <Span FontWeight="Bold" >Некоторый текст</Span>            
        </TextBlock>
        <Image Grid.Row="1" Width="200" Height="150" Margin="132,4" Grid.RowSpan="2" Source="{StaticResource img}"/>
        <!--А этот текст извлекается из ресурсов-->
        <Label Content="{StaticResource xxx}" FontSize="12" Grid.Row="2"/>
    </Grid>
</Window>
Результат выглядит так:

Для окна я подключил файл ресурса, код которого показал первым в этом посте. Затем в тот же словарь окна добавил ещё одну запись.
Все данные из обоих словарей бесшовно (разницы между тем, в каком именно словаре лежит нужное - нет) используются в примере.
градиент окна, высота верхнего текста и содержимое нижнего - берутся мною из словаря. Ссылка на картинку - так же тянется из словаря...

XAML-словарь - это текстовый файл. Ты хочешь в текстовый файл запихать двоичные данные (изображения)? Это можно сделать, но... Имхо - это изврат, т.к. файл зверски разрастается по объёму и править его очень неудобно. Лучше создай рядом каталог в засунь в него твои аватарки, а в xaml-документе прописывай относительные пути.

п.с. Как вообще правильно работать со словарями xaml-ресурсов, применительно к справочной системе AutoCAD (имхо):
1. Справочную информацию разбивать по xaml-файлам так, чтобы он был не сильно большим (дабы не путаться в коде) - пусть лучше будет несколько средних файлов, чем один огромный (в таком трудно ориентироваться).
2. В каждом xaml-файле отдельными ресурсами обозначить то, что должно быть одинаковым для каждой всплывающей подсказке (цвета, шрифты и т.п.).
3. Изображения, видео и аудио файлы, используемые в xaml-справке, следует хранить в подкаталогах (Images. Video, Sound, e.t.c) - чтобы было легче ориентироваться...
4. в XAML-разметке путь к внешним ресурсам, обозначенным в п.3 прописывать в виде относительных путей.
5. В разметке использовать привязку к ресурсам (для того и определили их), определённым в п.п. 2,3.
5. Видео, которое занимает длительное время, не стоит показывать через xaml-справку, т.к. юзер не сможет нажать паузу или отмотать назад (в случае необходимости). Т.о. ему придётся каждый раз смотреть заново и ни дай бог щёлкнуть мышкой - справка закроется. Т.о. не следует пихать в xaml-справку всё подряд только из-за того, что такая возможность присутствует.

Не знаю, понятно объяснил или нет...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 24.02.2011 в 18:12. Причина: добавил п.с.
hwd вне форума  
 
Непрочитано 24.02.2011, 17:25
#11
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


А когда для картинки указан относительный путь
Код:
[Выделить все]
<Image Source="images/rectcloud.jpg" Width="Auto" Height="Auto">
куда необходимо положить папку images?
__________________
...в шее моей жилы железные, и лоб мой - медный...
Pastor вне форума  
 
Непрочитано 24.02.2011, 17:44
1 | #12
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Pastor Посмотреть сообщение
куда необходимо положить папку images?
в тот каталог, в котором находится xaml-файл. В диалоговом окне Options нет необходимости добавлять новый каталог поиска.

п.с. кстати, назначив кнопке xaml-справку, вы её уже через меню CUI не удалите... В автокаде справку можно выбрать, но сбросить - никак (разработчики не продумали почему-то этот момент).

п.с.2
проверил на справочной системе AutoCAD - обнаружил, что автокад не распознаёт ResourceDictionary.MergedDictionaries... Т.о. Реализовать в справке автокада взаимодействие словарей между собой не удастся - ссылки на др. словари не работают. причём не работает это именно в справочной системе AutoCAD - в обычном WPF приложении всё пашет... Вывод - либо всю справку делать в одном xaml-файле (для всех кнопок), либо разбивать на несколько xaml-файлов, но они не будут иметь доступ к ресурсам друг друга.

п.с.3 Бесплатный XAML-редактор - тынц. Его можно использовать и применительно к xaml-справке AutoCAD, причём в процессе редактирования можно видеть результат (нужно только в процессе конструирования разметку помещать не в словарь, а в Page - когда результат понравится - вырезать из Page и скопировать его в тело элемента ProgressivePanel).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 24.02.2011 в 18:51. Причина: добавил п.с. и п.с. 2
hwd вне форума  
 
Непрочитано 26.11.2012, 19:48 Не получается
#13
Enya


 
Регистрация: 26.11.2012
Сообщений: 8


Подскажите пожалуйста..
хочу добавить дополнительную подсказку для своей команды из моего меню.
все делаю так как пишет справка Автокада "Добавление к команде дополнительной справки", а вот п.5 .....у меня не появляется диалоговое окно "5.В диалоговом окне "Выбрать код справки" выберите код справки для содержимого дополнительной справки. Нажмите ОК. "

и еще, где сохранит этот файл xaml? там где и мое меню?

Заранее спасибо.
Enya вне форума  
 
Непрочитано 22.01.2013, 22:24
1 | #14
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Enya Посмотреть сообщение
Подскажите пожалуйста..
хочу добавить дополнительную подсказку для своей команды из моего меню.
все делаю так как пишет справка Автокада "Добавление к команде дополнительной справки", а вот п.5 .....у меня не появляется диалоговое окно "5.В диалоговом окне "Выбрать код справки" выберите код справки для содержимого дополнительной справки. Нажмите ОК. "

и еще, где сохранит этот файл xaml? там где и мое меню?

Заранее спасибо.
Покажи свой XAML.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 25.01.2013, 11:14
#15
Enya


 
Регистрация: 26.11.2012
Сообщений: 8


Спасибо.
Но я уже этот вопрос решила. я просто сохраняла свой ХАML файл не в той кодировке. Потому и то не выводилось окно.
Уже все работает. Пользуюсь меню с подсказками)
Enya вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > XAML. Создание всплывающих подсказок и дополнительной справки для команд



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В русской версии AutoCAD 2010 SP1 32-bit файл Acad.PGP содержит ошибки. hwd Баги и пожелания в Autodesk 21 21.04.2010 20:27
Создание всплывающих подсказок в Exсel TIK Прочее. Программное обеспечение 14 05.03.2009 15:07