WPF меняет визуальный шаблон определенных ячеек DataGridC#

Место общения программистов C#
Ответить
Гость
 WPF меняет визуальный шаблон определенных ячеек DataGrid

Сообщение Гость »


Мне нужна ваша помощь по поводу моей проблемы с сеткой данных в WPF. На скриншоте ниже, выделенном зеленым, я хочу разделить содержимое ячейки на 2. По сути, я бы использовал stackpanel с двумя текстовыми блоками. Первый текстовый блок содержит текст, например «PORCH M4+ (3)», и текст должен быть выровнен ВЛЕВО. Тогда второй текстовый блок, например, имеет значение «700», и текст должен быть выровнен ВПРАВО. Мой источник данных — DataView, а в моей сетке данных для параметра AutoGenerateColumns установлено значение true. Причина, по которой для него установлено значение True, заключается в том, что столбцы должны быть динамическими, то есть имена столбцов не статичны и меняются в зависимости от того, что вы выбрали. Я попытался изменить событие Template on LoadingRow, но это не позволяет мне, поскольку оно запечатано. Может ли кто-нибудь помочь мне достичь желаемого результата?
Это сетка выходных данных. Зеленым выделены ячейки, которые я хочу разделить. Желтые — мои ключевые слова. Они фиксированы и не меняются. Это означает, что всякий раз, когда я вижу ключевое слово BldgSeq в itemrow[0], ячейки зеленого цвета будут разделены.
[img]https://i. stack.imgur.com/gVCJC.png[/img]
XAML Datagrid DgComparableParcel_LoadingRow event

Код: Выделить всё

private void DgComparableParcel_LoadingRow(object sender, DataGridRowEventArgs e)
{
dgComparableParcel.Height = 400;
var row = e.Row.Item as DataRowView;
var currentRowIndex = dgComparableParcel.Items.IndexOf(e.Row.Item);
if (row != null)
{
var itemRow = row.Row;
var header = itemRow.ItemArray[0].ToString();
if (header.Contains("BldgSeq") || header.Contains("Segments and Adjustments"))
{
var stackPanel = new FrameworkElementFactory(typeof(StackPanel));
var textBlock = new FrameworkElementFactory(typeof(TextBlock));
textBlock.Name = "txt1";
textBlock.SetValue(TextBlock.TextAlignmentProperty, TextAlignment.Left);
var textBlock1 = new FrameworkElementFactory(typeof(TextBlock));
textBlock1.Name = "txt2";
textBlock1.SetValue(TextBlock.TextAlignmentProperty, TextAlignment.Right);
//PORCH M4+ (3) example only
textBlock.SetValue(TextBlock.TextProperty, "PORCH M4+ (3)");
//700 exmple only
textBlock1.SetValue(TextBlock.TextProperty, "700");
stackPanel.AppendChild(textBlock);
stackPanel.AppendChild(textBlock1);
DataTemplate cellTemplate1 = new DataTemplate();
cellTemplate1.VisualTree = stackPanel;
//this doesn't allow me to change the visualtree
//e.Row.Template.VisualTree = stackPanel;

}
}
}
My datasource

Код: Выделить всё

 public DataView ComparableParcels
{
get { return _comparableParcels; }
set { _comparableParcels = value; OnPropertyChanged("ComparableParcels"); }
}


Источник: https://stackoverflow.com/questions/781 ... grid-cells
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»