powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / DataGrid wpf source code
2 сообщений из 2, страница 1 из 1
DataGrid wpf source code
    #38067177
Jack90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

1) Как получить исходный код контрола DataGrid wpf, не просто DataGrid.cs, а все сборки(классы) связанные с этим контролом + Generic.xaml. Необходимо добавить доп. функционал, это нереально(сложно) сделать наследовавшись от DataGrid в CustomControle. Что именно надо: Исходники сохраняем в папку, например DataGrid и добавляем папку к проекту, редактируем, наследуемся от этого Грида и получаем желаемый CustomControl. Поискав, нашел вот это - http://referencesource.microsoft.com/netframework.aspx, все исходники присутствуют, но собрать DataGrid в контрол, очень затратно по времени, так как используется более 50 классов, да и xaml файла там нет.

Если кто-то занимался подобным и может поделиться, буду очень признателен, желательно под Framework 4.5. Способ, как это все вытащить, тоже рассмотрю как вариант.

2) Когда все это я начал собирать, столкнулся с такой проблемой: При компиляции вылетает ошибка -
'DataGridCellsPresenter' is an ambiguous reference between 'System.Windows.Controls.Primitives.DataGridCellsPresenter' and DataGridControl.Microsoft.Windows.Controls.Primitives.DataGridCellsPresenter'. DataGridCellsPresenter компилятор нашел в 2х сборках, мне нужна 2 сборка DataGridControl.Microsoft.Windows.Controls.Primitives, как сделать приоритетной данную сборку?
Исправить данную ошибку можно как минимум 2я мне известными способами:
1) using DataGridCellsPresenter = DataGridControl.Microsoft.Windows.Controls.Primitives.DataGridCellsPresenter
2) DataGridControl.Microsoft.Windows.Controls.Primitives.DataGridCellsPresenter = new DataGridControl.Microsoft.Windows.Controls.Primitives.DataGridCellsPresenter()

1 и 2 вариант = много писанины, как задать приоритет на сборку и исключить данную ошибку?

Спасибо за помощь!
...
Рейтинг: 0 / 0
DataGrid wpf source code
    #38075082
Jack90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Потратив пару дней, так и не удалось все собрать. Так что просто создал CustomControl на основе DataGrid, переопределил Template DataGrida, воткнул под грид StatusBar и на бар добавляю CustomControl - SearchControl (несколько кнопок, checkbox и TextBox). Суть контрола, поиск производится по текущему столбцу, по содержанию TextBoxa searchControla Посоветуйте, как правильно оформить реализацию? Пока сделал так:
В контроле SeachControl переопределил OnApplyTemplate, в нем получаю ссылку на CustomDataGrid;
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            this.PART_GridRoot              = base.GetTemplateChild("PART_GridRoot")              as Grid;
            this.PART_ButtonSearchFirst     = base.GetTemplateChild("PART_ButtonSearchFirst")     as Button;
            this.PART_ButtonSearchPrevious  = base.GetTemplateChild("PART_ButtonSearchPrevious")  as Button;
            this.PART_ButtonSearchNext      = base.GetTemplateChild("PART_ButtonSearchNext")      as Button;
            this.PART_ButtonSearchLast      = base.GetTemplateChild("PART_ButtonSearchLast")      as Button;
            this.PART_ViewboxPathSearch     = base.GetTemplateChild("PART_ViewboxPathSearch")     as Viewbox;
            this.PART_DelayTextBox          = base.GetTemplateChild("PART_DelayTextBox")          as DelayTextBox;
            this.PART_CheckBoxSearchContext = base.GetTemplateChild("PART_CheckBoxSearchContext") as CheckBox;

            this.PART_DelayTextBox.DataType = typeof(string);
            dataGrid = Helpers.FindVisualParent<ExpandGrid>(this);

            this.PART_DelayTextBox.TextChanged += dataGrid.OnTextChanged;
        }


Реализация OnTextChanged в CustomGrid.
Код: c#
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.
33.
34.
        public void OnTextChanged(object sender, TextChangedEventArgs e)
        {
            DelayTextBox delayTextBox = e.OriginalSource as DelayTextBox;
            int rowIndex = _currentRowIndex;
            bool findItem = false;
            bool searchContext = (Helpers.FindVisualParent<SearchControl>(delayTextBox) as SearchControl).PART_CheckBox.IsChecked.Value;
            string searchText = delayTextBox.Text;

            if (this.Items.Count == 0 || string.IsNullOrEmpty(searchText))
                return;

            if (rowIndex <= -1)
                rowIndex = 0;

            if (_currentColumn == null)
                this.CurrentColumn = this.Columns[0];

            for (int i = rowIndex; i < this.Items.Count; i++)
            {
                if (searchContext)
                    findItem = (this.Items[i] as DataRowView)[_currentColumn.SortMemberPath].ToString().ToLower().Contains(searchText.ToLower());
                else
                    findItem = (this.Items[i] as DataRowView)[_currentColumn.SortMemberPath].ToString().ToLower().StartsWith(searchText.ToLower());

                if (findItem)
                {
                    this.CurrentCell = new DataGridCellInfo(this.Items[i], _currentColumn);
                    _currentCell.Focus();
                    this.ScrollIntoView(this.Items[i], _currentColumn);

                    return;
                }
            }
        }



Все работает, но реализация меня не устраивает, мягко говоря. Помогите дельным советом, как данные вопросы нужно решать? Таких контролов будет несколько, не хочу наступать на одни и те же грабли. По оформлению CustomControla возникает много вопросов, но, что-то находится в интернете. Дельных материалов по CustomControlам найти не смог, все очень поверхностно, интересуют книги, статьи на русском языке. Спасибо.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / DataGrid wpf source code
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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