понедельник, 8 октября 2012 г.

WPF: получаем строку из файла ресурсов в XAML разметку



   Недавно столкнулся с проблемой получения в XAML разметку WPF приложения строки из файла ресурсов. Кто не знает, ресурсы представляют собой весьма удобный контейнер, который может содержать информацию, которая необходима приложению. В моём случае, в свойство Text компонента TextBox необходимо было в XAML разметке назначить строку из файла ресурсов.
   Ну задача понятна. Попробуем её решить: создадим wpf приложение в VS. Сразу добавим соответствующую строку в ресурсы, для этого в главном меню перейдём в меню Project-...Properties. Если всё сделали правильно, перед вами откроется весьма солидное окно с множеством вкладок. Справа перейдём на вкладку Resources. Здесь добавим строку с именем defaultStringContent, в свойство value введём: "Эта строка извлечена из файла ресурсов". Нажмём Ctrl-S, тем самым сохранив сделанные изменения.

   Перейдём в окно дизайнера, создадим простенькую разметку нашего окна, как я уже сказал, основным элементом формы будет TextBox. Текст разметки приведён ниже:
<Window x:Class="GetResourceInXaml.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"      
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBox></TextBox>
    </Grid>
</Window>

   Я не буду вдаваться в детали работы с Xaml, т.к данный пост рассчитан на тех, кто хоть немного знает WPF, а работа с данной технологией невозможно без Xaml.
Теперь необходимо вставить в свойство Text TextBox'a строку из ресурсов. Для начала добавим в окно ссылку на ту самую ветвь в исходниках приложения, где содержатся эти ресурсы. У меня они содержатся в папке Properties. Посмотреть, где располагаются ресурсы можно в Solution Explorer'e. 

   В разметку сверху, где расположены строки типа: xmlns... Добавим:
        xmlns:local="clr-namespace:GetResourceInXaml.Properties"
   Здесь мы говорим, что через local мы можем обращаться к папке Properties. Отлично, теперь осталось назначить строку из ресурсов соответствующему свойству TextBox'a. Находим в разметке, где находится TextBox, и немного изменяем вид того, что написали:

        <TextBox Text="{x:Static local:Resources.defaultStringContent}"></TextBox>

   Если всё сделали правильно, то анализатор Xaml разметки подсветит то что мы добавили, начиная от фигурной скобки, тем самым давая понять, что что-то неправильно.
Перейдём опять в настройки проекта, на вкладку Resources, и здесь сверху переключим access Modifier с Internal на Public, ctrl-s.

   Теперь, если переключиться на xaml-представление, то мы должны увидеть в TextBox'e строку из ресурсов. Нажмём F5, тем самым скомпилировав приложение, удостоверимся в том, что строка из ресурсов действительно отображается.
На этом всё. Надеюсь, что данная заметка кому-то поможет.
Исходники:
http://ovrload.ru/files/getresourceinxaml_7c8ebf2d829a984fa735f0f49441df17.rar
08/10/2012

Богданов М.