Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки / 25 сообщений из 168, страница 1 из 7
16.05.2010, 15:05
    #36630607
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
Разбираюсь, как с помощью привязки к содержимому xml-файла, используя LINQ to XML, отобразить иерархию в элементе TreeView.
В качестве примера написал такой xml-файл исходных данных, которые следует отобразить в TreeView:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<?xml version="1.0" encoding="utf-8" ?>
<MyXmlDocument>
  <Category CategoryName="Компьютерная литература" Description ="Различная литература по компьютерной тематике" ToolTipText="Мой раздел">
    <Category CategoryName="Windows-приложения" Description ="Данная ОС наиболее популярна" ToolTipText="Моя ось">
      <Category CategoryName="MS Office 2007" Description ="Офисный пакет программ" ToolTipText="Мой офис"/>
      <Category CategoryName="Продукция компании Autodesk" Description ="Различные САПР" ToolTipText="Мой выбор">
        <Category CategoryName="AutoCAD" Description ="Самый распространённый САПР" ToolTipText="Мой САПР">
          <Book BookName ="AutoCAD 2010. Полещук Н.Н." Description ="Моя книжка по данному САПР" ToolTipText="Справочник"/>
          <Book BookName ="AutoCAD 2007, библия пользователя. (автора не помню)" Description ="Ещё одна моя книжка по данному САПР" ToolTipText="Справочник"/>
        </Category>
        <Category CategoryName="Revit" Description ="новое поколение САПР (BIM)" ToolTipText="Пока ещё не мой САПР"/>        
      </Category>
    </Category>
    <Category CategoryName="Linux-приложения" Description ="Свободно распространяемая ОС" ToolTipText="Интересно, но не сильно распространено"/>
  </Category>
  <Category CategoryName="Классика" Description ="Классическая литература" ToolTipText="Полезно для общего развития">
    <Category CategoryName="Поэзия" Description ="Стихи отечественных авторов" ToolTipText="Для души"/>
    <Category CategoryName="Повести и рассказы" Description ="Повести и рассказы отечественных авторов" ToolTipText="Это тоже для души"/>
  </Category>  
</MyXmlDocument>
Написал конвертер значений:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    //Конвертер для класса XElement. Задача этого конвертера - извлечение вложенных элементов типа XElement, инкапсулирующих
    //в себе разделы Category.
    public sealed class XmlConverter :IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value is XElement)
            {
                XElement x = (XElement)value;
                return x.Elements("Category");
            }
            else
            {
                return null;
            }
        }
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
После этого создал файл ресурса, в котором определил нужный мне шаблон:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:linq2Xml="clr-namespace:System.Xml.Linq;assembly=System.Xml.Linq"                                      
                    xmlns:local="clr-namespace:WpfGuiProject">
    <!--Шаблон иерархического отображения данных В СЛУЧАЕ ПОДКЛЮЧЕНИЯ К XML-ФАЙЛУ -->
    <HierarchicalDataTemplate DataType="{x:Type linq2Xml:XElement}">
        <!--Указываю источник данных, на основании которого должно формироваться дерево разделов-->
        <HierarchicalDataTemplate.ItemsSource>
            <Binding Path=".">
                <!--Указываю конвертер, который позволяет получить список дочерних элементов типа Category, по отношению к данному-->
                <Binding.Converter>
                    <local:XmlConverter/>
                </Binding.Converter>
            </Binding>
        </HierarchicalDataTemplate.ItemsSource>
        <!--Формирую визуальное представление элемента, отображаемого в дереве разделов-->
        <TextBlock Text="{Binding Path=Attribute[CategoryName].Value}">
                <TextBlock.ToolTip>
                    <Binding Path="Attribute[ToolTipText].Value"/>
                </TextBlock.ToolTip>
        </TextBlock>
    </HierarchicalDataTemplate>
</ResourceDictionary>
После этого, в конструкторе окна размещаю такой код:
Код: plaintext
1.
2.
xml = XElement.Load(@"..\..\XMLFile1.xml");
treeStructure.ItemsSource = xml.Elements("Category");//treeStructure - элемент TreeView
Однако я не получаю разворачивающейся древовидной структуры, состоящей из имён элементов и всплывающих "ТуллТипов", как прописывал это в xaml-разметке шаблона. Результат выглядит так:



Искал в интернете примеры по иерархическому отображению структуры, считанное с использованием linq to xml и реализованное в виде привязки - мало что нашел. На основании того что нашёл и написал выше обозначенный код.

Что я сделал не верно?
...
Рейтинг: 0 / 0
16.05.2010, 20:13
    #36630907
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
Консольное приложение (код ниже) делает по своей сути то же самое, что и код топика, и всё отображает верно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;

namespace ConsoleApplication2
{
    class Program
    {
        //Шаг смещения дочерних элементов в древовидном отображении
        static string tab = new string(' ', 2);

        //точка входа
        static void Main(string[] args)
        {
            XElement xml = XElement.Load("XMLFile1.xml");
            NewMethod(xml, string.Empty);
            Console.Read();
        }

        //рекурсивный метод построения структуры каталогов (отображает их имена)
        private static void NewMethod(XElement xml, string tab1)
        {
            foreach (XElement item in xml.Elements("Category"))
            {
                Console.WriteLine("{0}{1}", tab1, item.Attribute("CategoryName").Value);//В оригинале аналогичным образом указано, значение какого атрибута следует отображать
                NewMethod(item, tab1 + tab);
            }
        }
    }
}
результат такой:

...
Рейтинг: 0 / 0
16.05.2010, 20:33
    #36630936
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
Если закомментировать часть шаблона, как показано ниже:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    <!--Шаблон иерархического отображения данных В СЛУЧАЕ ПОДКЛЮЧЕНИЯ К XML-ФАЙЛУ -->
    <HierarchicalDataTemplate DataType="{x:Type linq2Xml:XElement}">
        <!--Указываю источник данных, на основании которого должно формироваться дерево разделов-->
        <HierarchicalDataTemplate.ItemsSource>
            <Binding Path=".">
                <!--Указываю конвертер, который позволяет получить список дочерних элементов типа Category, по отношению к данному-->
                <!--<Binding.Converter>
                    <local:XmlConverter/>
                </Binding.Converter>-->
            </Binding>
        </HierarchicalDataTemplate.ItemsSource>
        <!--Формирую визуальное представление элемента, отображаемого в дереве разделов-->
        <!--<TextBlock Text="{Binding Path=Attribute[CategoryName].Value}">
                <TextBlock.ToolTip>
                    <Binding Path="Attribute[ToolTipText].Value"/>
                </TextBlock.ToolTip>
        </TextBlock>-->
    </HierarchicalDataTemplate>
то результат будет тот же самый, что был показан мною на скрине выше. Отсюда вывод - созданный мною для xml-данных шаблон не работает. Хотелось бы понять почему.
____________________________________
п.с. тихо сам с собою, я веду беседу...
...
Рейтинг: 0 / 0
17.05.2010, 11:20
    #36631596
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
Если в отладчике посмотреть, в конвертере вот это условие
...
if (value is XElement)
...
проходит (true)?
...
Рейтинг: 0 / 0
17.05.2010, 11:32
    #36631633
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
2 МСУ
Обещанная ссылка на упрощённый вариант исходников (выбросил всё, что связано с БД).
LRЕсли в отладчике посмотреть, в конвертере вот это условие
...
if (value is XElement)
...
проходит (true)?
как я уже писал выше - мой шаблон попросту не работает, и в процессе работы код просто не доходит до этой точки.
...
Рейтинг: 0 / 0
17.05.2010, 11:47
    #36631665
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
Андрей, Вы заготовили тестовый проект, как я просил?
...
Рейтинг: 0 / 0
17.05.2010, 11:56
    #36631696
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
МСУАндрей, Вы заготовили тестовый проект, как я просил?
Ну да. В последнем линке - это вообще "лайт" версия, в которой оставлено только всё то, что относится непосредственно к озвученной проблеме. Весь код, относящийся к базе данных выброшен.
...
Рейтинг: 0 / 0
17.05.2010, 11:59
    #36631706
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
Compositum
Сорри, я просто увидел в архиве Linq2Sql проект, какой-то ConsoleApplication1 проект и подумал, что Вы нихрена не сделали. Теперь вижу, вы просто их исключили из солюшена ;)
Такой вопрос навскидку: а Вам обязателен ResourceDictionary, напрямую в MainWindow.xaml не хотите HierarchicalDataTemplate закурить?
...
Рейтинг: 0 / 0
17.05.2010, 12:04
    #36631725
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
Кстати, у Вас в справочнике прописан ожидаемый тип шаблона: DataType="{x:Type linq2Xml:XElement}"
Следовательно, о каком вообще xml речь? Типизируйте айтемы коллекции к данному типу и подгружайте в дерево.
...
Рейтинг: 0 / 0
17.05.2010, 12:08
    #36631738
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
Compositumкак я уже писал выше - мой шаблон попросту не работает, и в процессе работы код просто не доходит до этой точки.
если в TreeView указать этот шаблон (ItemTemplate="{StaticResource myHierarchicalTemplate}"), то все будет работать...
...
Рейтинг: 0 / 0
17.05.2010, 12:10
    #36631743
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
МСУCompositum
Сорри, я просто увидел в архиве Linq2Sql проект, какой-то ConsoleApplication1 проект и подумал, что Вы нихрена не сделали. Теперь вижу, вы просто их исключили из солюшена ;)
Такой вопрос навскидку: а Вам обязателен ResourceDictionary, напрямую в MainWindow.xaml не хотите HierarchicalDataTemplate закурить?
Это сути проблемы не изменит. Я предпочитаю выносить ресурсы за рамки xaml-разметки элемента, т.к. таким ресурсом (в случае необходимости) можно будет воспользоваться не только в MainWindow.xaml
...
Рейтинг: 0 / 0
17.05.2010, 12:11
    #36631745
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
кстати, Dictionary1.xaml в примере не подгружается, шаблон не имеет ключа, я задал ему x:Key="myHierarchicalTemplate" и перенес в Application.Resources - все заработало
...
Рейтинг: 0 / 0
17.05.2010, 12:15
    #36631758
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
Код: plaintext
1.
2.
3.
<TreeView Name="treeStructure" Margin="2" Grid.Row="1"
             ItemsSource="{Binding Path=Root.Elements}"              
             ItemTemplate="{StaticResource template}"
/>

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:linq2Xml="clr-namespace:System.Xml.Linq;assembly=System.Xml.Linq"                                        
                    xmlns:local="clr-namespace:WpfGuiProject">

    <!--Шаблон иерархического отображения данных В СЛУЧАЕ ПОДКЛЮЧЕНИЯ К XML-ФАЙЛУ -->
    <HierarchicalDataTemplate x:Key="template">
        <!--Указываю источник данных, на основании которого должно формироваться дерево разделов-->
        <HierarchicalDataTemplate.ItemsSource>
            <Binding Path="Elements">
                <!--Указываю конвертер, который позволяет получить список дочерних элементов типа Category, по отношению к данному-->
                <Binding.Converter>
                    <local:XmlConverter/>
                </Binding.Converter>
            </Binding>
        </HierarchicalDataTemplate.ItemsSource>
        <!--Формирую визуальное представление элемента, отображаемого в дереве разделов-->
        <TextBlock Text="{Binding Path=Attribute[CategoryName].Value}">
                <TextBlock.ToolTip>
                    <Binding Path="Attribute[ToolTipText].Value"/>
                </TextBlock.ToolTip>
        </TextBlock>
    </HierarchicalDataTemplate>
</ResourceDictionary>
...
Рейтинг: 0 / 0
17.05.2010, 12:17
    #36631760
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
+1 к x:Key, у меня тоже с ним работает. И его нужно привязать к ItemTemplate.
...
Рейтинг: 0 / 0
17.05.2010, 12:20
    #36631768
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
LRкстати, Dictionary1.xaml в примере не подгружается, шаблон не имеет ключа, я задал ему x:Key="myHierarchicalTemplate" и перенес в Application.Resources - все заработало
у меня всё подгружается. В Application.Resources ресурсы не переношу принципиально - если это окно использовать в плагинах (например в AutoCAD), то в том случае, когда окошко будет хранить ресурсы в Application.Resources - не получится создать экземпляр этого окна. т.к. там приходится создавать окно так:
Код: plaintext
MyWin win = new MyWin(); 
А ежели в XAML-разметке MyWin будет ссылка на ресурс, хранящийся в Application.Resources, то таким образом не удастся создать экземпляр класса MyWin, т.к. это означает, что сначала нужно создать экземпляр приложения и затем, при создании экземпляра MyWin, как-то указать ему, в экземпляре какого класса (производного от Application) искать ресурсы. Это как-то геморно.
...
Рейтинг: 0 / 0
17.05.2010, 12:23
    #36631779
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
Относительно ключа - тогда уж лучше прописывать как-то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:linq2Xml="clr-namespace:System.Xml.Linq;assembly=System.Xml.Linq"                                        
                    xmlns:local="clr-namespace:WpfGuiProject">

    <!--Шаблон иерархического отображения данных В СЛУЧАЕ ПОДКЛЮЧЕНИЯ К XML-ФАЙЛУ -->
    <HierarchicalDataTemplate x:Key="{x:Type linq2Xml:XElement}" DataType="{x:Type linq2Xml:XElement}">
        <!--Указываю источник данных, на основании которого должно формироваться дерево разделов-->
        <HierarchicalDataTemplate.ItemsSource>
            <Binding Path=".">
                <!--Указываю конвертер, который позволяет получить список дочерних элементов типа Category, по отношению к данному-->
                <Binding.Converter>
                    <local:XmlConverter/>
                </Binding.Converter>
            </Binding>
        </HierarchicalDataTemplate.ItemsSource>
        <!--Формирую визуальное представление элемента, отображаемого в дереве разделов-->
        <TextBlock Text="{Binding Path=Attribute[CategoryName].Value}">
                <TextBlock.ToolTip>
                    <Binding Path="Attribute[ToolTipText].Value"/>
                </TextBlock.ToolTip>
        </TextBlock>
    </HierarchicalDataTemplate>
</ResourceDictionary>
теоретически, в этом случае, если мне не изменяет память, шаблон будет автоматически применяться ко всем встречающимся XElement
...
Рейтинг: 0 / 0
17.05.2010, 12:27
    #36631787
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
однако я по прежнему не получаю нужного результата
...
Рейтинг: 0 / 0
17.05.2010, 12:32
    #36631802
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
Compositumоднако я по прежнему не получаю нужного результата
Я не понимаю смысла Вашего конвертера. Он как-бы должен отбирать элементы Category. Дык они и так биндятся:

Код: plaintext
treeStructure.ItemsSource = XElement.Load(@"..\..\XMLFile1.xml").Elements("Category");

Во-вторых, в метод XmlConverter.Convert приходит не XElement, а ReadOnlyObservableCollection.
...
Рейтинг: 0 / 0
17.05.2010, 13:13
    #36631905
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
МСУ
Я не понимаю смысла Вашего конвертера. Он как-бы должен отбирать элементы Category. Дык они и так биндятся:
Код: plaintext
treeStructure.ItemsSource = XElement.Load(@"..\..\XMLFile1.xml").Elements("Category");
Это лишь первый уровень иерархии. Он должен отбирать дочерние элементы Category элемента Category.
[quot МСУ]в метод XmlConverter.Convert приходит не XElement, а ReadOnlyObservableCollection.
Если задать шаблону ключ:
Код: plaintext
1.
<HierarchicalDataTemplate x:Key="xxx" DataType="{x:Type linq2Xml:XElement}">
и затем привязать его в xaml-разметке элемента TreeView:
Код: plaintext
<TreeView Name="treeStructure" Margin="2" Grid.Row="1" ItemTemplate="{StaticResource ResourceKey=xxx}" />
то древовидная структура строится. Спасибо.
Я не понимаю такого момента - почему такая разметка:
Код: plaintext
<HierarchicalDataTemplate x:Key="{x:Type linq2Xml:XElement}" DataType="{x:Type linq2Xml:XElement}">
не даёт желанного результата. (((
...
Рейтинг: 0 / 0
17.05.2010, 13:21
    #36631931
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
CompositumЯ не понимаю такого момента - почему такая разметка:
Код: plaintext
<HierarchicalDataTemplate x:Key="{x:Type linq2Xml:XElement}" DataType="{x:Type linq2Xml:XElement}">
не даёт желанного результата. (((
Вы хоть сами поняли, что написали? :)
...
Рейтинг: 0 / 0
17.05.2010, 13:27
    #36631950
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
МСУCompositumЯ не понимаю такого момента - почему такая разметка:
Код: plaintext
<HierarchicalDataTemplate x:Key="{x:Type linq2Xml:XElement}" DataType="{x:Type linq2Xml:XElement}">
не даёт желанного результата. (((
Вы хоть сами поняли, что написали? :)
Конечно Даниил. А Вы разве не в курсе, что назначение ключу подобного имени приводит к тому, что данный шаблон будет автоматом цепляться всеми элементами данного типа (т.е. им не нужно указывать шаблон)?
я это у Криса Андерсона срисовал давно )
...
Рейтинг: 0 / 0
17.05.2010, 13:32
    #36631971
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
он пишет на эту тему на стр. 374.
...
Рейтинг: 0 / 0
17.05.2010, 13:39
    #36632008
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
Compositumя это у Криса Андерсона срисовал давно )
Хм, а, разве, не к Style только можно применять такую фичу? Честно говоря, не знал. Спасибо! :)
...
Рейтинг: 0 / 0
17.05.2010, 13:44
    #36632025
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
МСУCompositumя это у Криса Андерсона срисовал давно )
Хм, а, разве, не к Style только можно применять такую фичу? Честно говоря, не знал. Спасибо! :)
блиииииин... точно... это только к стилям. извиняюсь тогда всё встаёт на свои места. это меня перемкнуло, что можно и к шаблонам (((
...
Рейтинг: 0 / 0
17.05.2010, 13:48
    #36632040
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Иерархическое отображение данных xml-файла в элементе TreeView с помощью привязки / 25 сообщений из 168, страница 1 из 7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]