WPF DataGrid получает неправильную высоту при использовании с RowDetails - PullRequest
2 голосов
/ 22 апреля 2010

У меня проблема с новым компонентом DataGrid, поставляемым с .NET4. Проблема возникает при использовании RowDetails. С RowDetails общая высота сетки увеличивается при выборе элемента. Это необходимо, чтобы показать все строки и RowDetails, и именно то, что я ожидаю. При выборе другой строки первые RowDetails свернутся, и детали для новой выбранной строки развернуты. Проблема сейчас в том, что общая высота DataGrid, похоже, включает в себя свернутые детали строк предыдущего элемента. Я предполагаю, что он сначала открывает новые детали строки, а затем сворачивает старые - и никогда не изменяет размеры до меньших размеров.

Рассмотрим этот простой DataGrid:

<DataGrid ItemsSource="{Binding Cars}" Background="Blue" SelectionMode="Single" AutoGenerateColumns="True" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="20,20,0,0" Width="450">
    <DataGrid.RowDetailsTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical">
                <TextBlock>Presenting the car details:</TextBlock>
                <TextBlock Text="{Binding Brand}"></TextBlock>
                <TextBlock Text="{Binding CarColor}"></TextBlock>
            </StackPanel>
        </DataTemplate>
    </DataGrid.RowDetailsTemplate>
</DataGrid>

Также требуется несколько строк в коде:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new MyViewModel(); 
    }
}

public class MyViewModel
{
    private readonly ObservableCollection<Car> _cars = new ObservableCollection<Car>();

    public MyViewModel()
    {
        _cars.Add(new Car("Toyota", "Silver"));
        _cars.Add(new Car("VW", "Black"));
        _cars.Add(new Car("Audi", "Blue"));
    }

    public ObservableCollection<Car> Cars
    {
        get
        {
            return _cars; 
        }
    }
}

public class Car
{
    public Car(string brand, string color)
    {
        Brand = brand;
        CarColor = color; 
    }

    public string Brand { get; set; }
    public string CarColor { get; set; }
}

Выберите один элемент, затем другой - и вы увидите, что синий фон DataGrid показывает.

Можно ли как-нибудь исправить эту проблему? Я предполагаю, что это ошибка в компоненте. Если нет решения; Может кто-нибудь сказать мне, где сообщить об ошибке?

Ответы [ 2 ]

3 голосов
/ 22 апреля 2010

У меня была такая же проблема, когда DataGrid была в WPF Toolkit, и я тоже не мог найти решение. Если у кого-то есть решение для меня - пожалуйста, кричите! Но я предполагаю, что это ошибка в компоненте, и подал отчет об ошибке в Microsoft .

0 голосов
/ 28 февраля 2013

Ответ здесь: WPF DataGrid Строка не регулирует высоту после расширения Детали строки

Вы можете использовать следующий установщик в своем стиле DataGrid:

<Setter Property="ScrollViewer.CanContentScroll" Value="False" />

Я думаюэто какая-то магия.

...