Silverlight — сетка данных в Scrollviewer, столбец.Width= «*» позволяет сетке данных занимать несколько ширин экрана

#silverlight #silverlight-4.0 #datagrid #scrollviewer

#silverlight #silverlight-4.0 #сетка данных #scrollviewer

Вопрос:

При следующей настройке последний столбец, имеющий ширину *, заставляет datagrid создавать огромные горизонтальные полосы прокрутки (расширяет сетку на несколько ширин экрана). Я не совсем уверен, почему это так, но мне действительно нужен способ избежать этого. Я не хочу «имитировать» столбцы с длиной *.

редактировать: По-видимому, я не единственный, кто это заметил. http://connect.microsoft.com/VisualStudio/feedback/details/559644/silverlight-4-datagrid-star-column-width

Xaml:

 <ScrollViewer Padding="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"  >
    <sdk:DataGrid AutoGenerateColumns="False" x:Name="dg"/>
</ScrollViewer>
  

Код:

 private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        dg.Columns.Add(new DataGridTextColumn { Binding = new Binding("A"), Header = "A" });
        dg.Columns.Add(new DataGridTextColumn { Binding = new Binding("B"), Header = "B" });
        dg.Columns.Add(new DataGridTextColumn { Binding = new Binding("C"), Header = "C" });
        dg.Columns[2].Width = new DataGridLength(1, DataGridLengthUnitType.Star);
        dg.ItemsSource = new[] 
        {
            new I { A = "SAF", B = "SAF", C = "SAF" },
            new I { A = "SAF", B = "SAF", C = "SAF" },
            new I { A = "SAF", B = "SAF", C = "SAF" }
        };
    }

    public class I
    {
        public string A { get; set; }
        public string B { get; set; }
        public string C { get; set; }
    }
  

Комментарии:

1. почему вы помещаете сетку данных в scrollviewer?

2. Я работаю над большим приложением, и сетка находится внутри фрейма, который находится внутри scrollviewer. Бывают случаи (например, если у вас много столбцов, которые на самом деле занимают место), когда вам хотелось бы использовать режим прокрутки. Это воспроизводимый образец. Будьте уверены, если у меня есть это в scrollviewer, это должно быть в scrollviewer, и если бы это не обязательно было в scrollviewer, я бы удалил это.

Ответ №1:

вам нужно задать максимальную ширину в scrollviewer? в противном случае ширина по умолчанию равна auto, а максимальная ширина равна бесконечности

Ответ №2:

Если вы удалите

dg.Columns[2].Width = новая длина сетки данных(1, длина сетки данных UnitType.Star);

проблема должна исчезнуть. Могу я спросить, почему вы хотите, чтобы последний столбец занимал все остальное пространство? Столбец на самом деле знает, как правильно изменять свой размер, чтобы соответствовать размеру ячейки и размеру заголовка столбца.

Кроме того, если вы не укажете ширину столбца, то вам действительно не нужен scrollviewer для прокрутки и просмотра всех столбцов. В сетку данных встроен scrollviewer, и когда на экране появляются столбцы, появляется горизонтальная полоса прокрутки.

Я надеюсь, это поможет. 🙂

Комментарии:

1. В моем исходном сообщении указано, что это именно то поведение, которое я ищу. Я хочу, чтобы мой последний столбец занимал оставшееся пространство. 1) Я думаю, что это должно быть поведение по умолчанию, потому что в противном случае вы действительно просто теряете место 2) В этом случае мой последний столбец — это что-то вроде столбца ошибки / комментария, в котором будет сообщение. Так что удаление этого действительно не помогает, но спасибо за ваш ответ.

2. Вы хотите сказать, что ваш последний столбец очень длинный, поэтому он должен занимать все остальное пространство?

3. Я создал пример проекта и поместил его в cid-f9ac8aa3f6afdcc3.office.live.com/self.aspx/Public/… Если вы обнаружите, что он по-прежнему не выполняет то, что вам нужно, пожалуйста, я его отключу.

4. Я понимаю, о чем вы говорите, но это поведение немного отличается от того, чего я пытаюсь достичь. В простом смысле это аналогично, но на самом деле я пытаюсь объединить это с шаблоном details, который не простирается дальше конца последнего столбца. Для согласованности я бы хотел, чтобы последний столбец простирался до конца доступной области, независимо от того, имеет ли последний столбец в данный момент какие-либо длинные значения.

5. извините, у меня заканчиваются идеи … : (