Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выравнивание DataGrid в Expander, Stretch в DataGrid 
:(
    Опции темы
interv
  Дата 21.10.2013, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 24.1.2012

Репутация: нет
Всего: 4



Есть окошко
Код

<Window x:Class="WpfApplication31.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <DataGrid Name="f_DataGrid">
    <DataGrid.RowDetailsTemplate>
      <DataTemplate>
        <Grid>
          <Expander Header="Експандер" 
                    HorizontalContentAlignment="Stretch">
            <DataGrid Name="f_History" 
                      HorizontalAlignment="Stretch">
              <DataGrid.Columns>
                <DataGridTextColumn Width="*" 
                                    Header="ФИО" />
                <DataGridTextColumn Width="*" 
                                    Header="Дата/время"/>
                <DataGridTextColumn Width="3*" 
                                    Header="Действие"/>
              </DataGrid.Columns>
            </DataGrid>
          </Expander>
        </Grid>
      </DataTemplate>
    </DataGrid.RowDetailsTemplate>    
  </DataGrid>
</Window>



в превьюве отображается дрянь (то же и в откомпилиной программе), колонки не растягиваются по ширине таблицы. если у Grid задать фиксированный Width, то все в порядке.

Это сообщение отредактировал(а) interv - 22.10.2013, 07:56

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  Безымянный.png 2,55 Kb
PM MAIL   Вверх
dzaraev
Дата 21.10.2013, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 12.1.2013

Репутация: нет
Всего: 1



Я не знаю, что я делаю не так, но у меня всё красиво, воспроизведите проблемы на моём примере, если что.


Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  WpfApplication31.zip 10,44 Kb
--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
interv
Дата 21.10.2013, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 24.1.2012

Репутация: нет
Всего: 4



Действительно, возможно ошибка глубже.. Будем капать.
Спасибо.
PM MAIL   Вверх
interv
Дата 22.10.2013, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 24.1.2012

Репутация: нет
Всего: 4



В общем вот глючная разметка, совсем забыл сказать, DataGrid выступает в виде RowDetailsTemplate у DataGrid'а
Код

<Window x:Class="WpfApplication31.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <DataGrid Name="f_DataGrid">
    <DataGrid.RowDetailsTemplate>
      <DataTemplate>
        <Grid>
          <Expander Header="Експандер" 
                    HorizontalContentAlignment="Stretch">
            <DataGrid Name="f_History" 
                      HorizontalAlignment="Stretch">
              <DataGrid.Columns>
                <DataGridTextColumn Width="*" 
                                    Header="ФИО" />
                <DataGridTextColumn Width="*" 
                                    Header="Дата/время"/>
                <DataGridTextColumn Width="3*" 
                                    Header="Действие"/>
              </DataGrid.Columns>
            </DataGrid>
          </Expander>
        </Grid>
      </DataTemplate>
    </DataGrid.RowDetailsTemplate>    
  </DataGrid>
</Window>



PM MAIL   Вверх
dzaraev
Дата 25.10.2013, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 12.1.2013

Репутация: нет
Всего: 1



Всё просто, вы использовали звездочки в значениях DataGridTextColumn.Width. Но такой синтаксис прокатывает только для тех элементов, у которых свойства Height/Width имеют тип GridLength(ссылка) (например классы ColumnDefinition/RowDefinition) и с которыми связан экземпляр GridUnitType(ссылка). 
Вы же используете класс DataGridTextColumn, у которого свойство Width/Height имеет тип double. Wpf знает, как превратить звёздочку * в GridLength, но не знает, как её превратить в double. В итоге во время выполнения ваши колонки получают в свойствах Width значение double.NaN и все колонки оказываются свёрнутыми. 
Что я изменил в вашем примере: значения свойств DataGridTextColumn.Width переставил на Auto - этот синтаксис WPF "понимает" для данного класса. Плюс добавил несколько свойств и данных, просто чтобы увидеть грид "в работе".

Это сообщение отредактировал(а) dzaraev - 25.10.2013, 07:26

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  WpfApplication31.zip 5,72 Kb
--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
interv
Дата 2.12.2013, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 24.1.2012

Репутация: нет
Всего: 4



Большое спасибо, но auto не подойдет, мне нужно что-то подобное.
На данный момент перехватываю события изменения колонок родительского DataGrid, и устанавливаю фактическую ширину у Expander по сумме фактических размеров колонок в пикселях.
Вот такой костыль. В инете до сих пор ответа не нашел.
ЗЫ: DataGridTextColumn.Width имеет тип DataGridLength, а вот свойство ActualWidth уже имеет тип Double. Пожалуйста не путайте.

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Безымянный.png 10,18 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.