Попытка обернуть текстовую сетку в код позади - PullRequest
0 голосов
/ 20 июня 2019

Используя C # и WPF, я пытаюсь обернуть текст в столбец DataGrid. Я устанавливаю ItemsSource DataGrid в коде позади, а не использую привязку данных.

Насколько я могу судить, для сетки данных нет свойства 'wrap', но есть возможность вложить данные ячейки в текстовый блок, который можно обернуть. К сожалению, все, что я видел, чтобы сделать это, использует привязку данных в xaml, что потребовало бы большого рефакторинга, поэтому я пытаюсь избежать этого.

Мой товар xaml:

<DataGrid x:Name="dgvOrderItems" AutoGeneratedColumns="DgvOrderItems_AutoGeneratedColumns" Height="570" VerticalAlignment="Stretch" Width="auto" HorizontalAlignment="Stretch" FontSize="10" Padding="0" Margin="0,20,0,0" ></DataGrid>

Мой код для DgvOrderItems_AutoGeneratedColumns:

dgvOrderItems.SelectionUnit = DataGridSelectionUnit.FullRow;
dgvOrderItems.IsReadOnly = true;
dgvOrderItems.ColumnHeaderHeight = 15;
dgvOrderItems.Columns[0].Header = "Order Item";
dgvOrderItems.Columns[0].Width = 113;
dgvOrderItems.Columns[1].Visibility = Visibility.Hidden;
dgvOrderItems.Columns[2].Header = "Qty.";
dgvOrderItems.Columns[2].Width = 25;

Пока что мне не удалось найти хороший способ обернуть "Элемент заказа", если длина превышает указанную ширину.

1 Ответ

0 голосов
/ 21 июня 2019

Пройдя туда-сюда, я решил пойти на то, что предложили @TerryTyson и @EdPlunkett, реорганизовав его с лучшей привязкой данных.Спасибо, ребята, за совет.

XAML:

<DataGrid x:Name="dgvOrderItems" Height="570" VerticalAlignment="Stretch" Width="138" HorizontalAlignment="Stretch" FontSize="10" Padding="0" HorizontalScrollBarVisibility="Hidden">
<DataGrid.ColumnHeaderHeight>20</DataGrid.ColumnHeaderHeight>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Order Item" Width="108" Binding="{Binding ItemNumber}">
            <DataGridTextColumn.ElementStyle>
                <Style>
                    <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
                </Style>
            </DataGridTextColumn.ElementStyle>
        </DataGridTextColumn>
        <DataGridTextColumn Header="Qty." Width="30" Binding="{Binding ItemQty}">
            <DataGridTextColumn.ElementStyle>
                <Style>
                    <Setter Property="TextBlock.TextAlignment" Value="Center" />
                </Style>
            </DataGridTextColumn.ElementStyle>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

Класс для моих данных:

public class SimpleOrderInfo
{
    public string ItemNumber { get; set; }
    public int ItemQty { get; set; }

    public SimpleOrderInfo(string itemNumber, int itemQty)
    {
        this.ItemNumber = itemNumber;
        this.ItemQty = itemQty;
    }
}

Настройка моего ItemsSource:

public List<SimpleOrderInfo> simpleOrderInfo = new List<SimpleOrderInfo>();
simpleOrderInfo = business.GetSimpleOrderInfo(orderNumber);
dgvOrderItems.ItemsSource = simpleOrderInfo;

Я чувствую, что это, возможно, еще можно почистить, но оно работает и намного чище, чем я начал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...