Denis Gladkikh
Russian   |  English

WPF 4.0. Что нового? Часть 5.

Последняя статья из серии что нового в WPF. Предыдущие версии: 1, 2, 3, 4. В данной части будет небольшая солянка из еще найденных и откопанных нововведений. Предполагаю, что можно найти и другие, но уже и эти не совсем нужны в продакшене, потому, пожалуй, пора остановится.

Xbap – Full Trust

В более ранних версиях, если вы попытаетесь установить Full Trust Xbap, то увидите ошибку “Trust not Granted”. Решений было несколько, одно из которых было – подпись приложения сертификатом и установка сертификата в локальное хранилище пользователя, но тут терялась прелесть технологии ClickOnce. Теперь же пользователю будет предложен диалог выбора – запускать приложение или нет.

Updated File Dialogs

В предыдущих версиях окна выбора файлов, директорий и т.п. выглядели в стиле WinXP, теперь же окна полностью соответствуют ОС, в которой запущено приложение, а точнее диалоги выбора файлов в Windows 7 выглядят как в Windows 7.

Key\Gesture Binding

Появилась возможность биндить Key и Modifiers в KeyBinding. Теперь можно создать свою DelegateCommand со свойствами

public Key GestureKey { get; set; }
public ModifierKeys GestureModifier { get; set; }
public MouseAction MouseGesture { get; set; }

Инициализировать команду следующим образом

public ICommand ExitCommand
{
    get
    {
        if (exitCommand == null)
        {
            exitCommand = new DelegateCommand(Exit);
            exitCommand.GestureKey = Key.X;
            exitCommand.GestureModifier = ModifierKeys.Control;
            exitCommand.MouseGesture = MouseAction.LeftDoubleClick;
        }
        return exitCommand;    
    }
}

А дальше забиндить клавиши:

<Window.InputBindings>
    <KeyBinding Command="{Binding ExitCommand}" Key="{Binding ExitCommand.GestureKey}" Modifiers="{Binding ExitCommand.GestureModifier}"/>
</Window.InputBindings>

Без необходимости объявления ресурсов.

Script Interop in Xbap

Полезная функциональность для тех, кто встраивает Xbap в свои веб-странички. Кстати, а такие люди вообще бывают? Вообще, конечно, ситуация очень редкая, чтобы xbap хостился внутри html страницы, но все же возможная для приложений внутри локальной сети.

В случае, если у нас на странице будет объявлена javascript функция ReportDate:

function ReportDate(dateTime) {
    date = new Date(dateTime);
    var dateBox = document.getElementById("displayDate");
    dateBox.value = date.getFullYear();
}

То теперь при помощи класса BrowserInteropHelper мы сможем вызвать ее из нашего xbap приложения очень просто:

dynamic script = BrowserInteropHelper.HostScript;
script.ReportDate(DateTime.Now);

Полноценный пример можно скачать и разобрать здесь - New WPF Features: Script Interop in Xbap

XAML: Node Loop flexibility

Как известно в .NET 4 появилась отдельная библиотека System.Xaml, позволяющая нам обрабатывать Xaml разметку, считывать и превращать в граф объектов. Раньше у нас была возможность так же работать с Xaml разметкой при помощи XamlReader и XamlWriter, но все что они нам давали – это считывать и записывать Xaml, но не предоставляли нам возможность работать с ним. Теперь же набор классов для работы с Xaml пополнился, например, XamlXmlReader, который позволяет пробегаться еще и по элементам xaml дерева. Пример можно посмотреть здесь - Node Loop flexibility, в данном примере у считываемого Xaml файла заменяют родительский элемент Window на Page.

Progg it


Вас также может заинтересовать

rss twitter

Комментарии (3)

Сергей ( ) #
avatar
"Теперь же пользователю будет предложен диалог выбора – запускать приложение или нет."
Интересно а как сделать чтобы пользователю выдавалось такое сообщение?
у меня сейчас такая проблема. Есть приложение xbap которое взаимодействет с WCF. Если я ставлю приложению частичное доверие то он не может подключиться к WCF если ставлю полное то работате только если приложение подписано сертификатом и у клиента стоит этот сертификат. Как вы правильно заметели теряется "прелесть технологии ClickOnce". Что можете мне посоветовать?
Denis Gladkikh ( ) #
avatar
а WCF из другого домена? И что значит не работает? Ошибку выдает?
Сергей ( ) #
avatar
если с полным доверием и на клиенте сервтификат не стоит то приложение не запускается с ошибкой "Trust Not Granted", если с частичным то приложение запускается но при подключении к сервису выдается ошибка "Request Failed". При этом desktop приложение с частичным доверием (не XBAP) отлично подключается к WCF.
WCF находится на отдельном сервере в Интернет
Добавить комментарий

Если вы хотите получать уведомления о новых комментариях к данному топику, укажите, пожалуйста, email и отметьте соответствующий пункт в форме. Если вы хотите добавить код в тексте комментария, то заключите его внутри тега [code]...[/code], более того можно уточнить язык, на котором написан данный код при помощи [code cs]...[/code], где вместо cs могут быть cs, html, xml, java, js, php, sql, cpp, css.

 

busy