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

    • .NET
    • .NET 4.0
    • WPF
    • WPF 4
    • Visual Studio 2010
  • 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.

See Also