WPF 4.0. Что нового? Часть 5.
- modified:
- reading: 3 minutes
Последняя статья из серии что нового в 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.