Существуют ли неписанные ограничения для Silverlight RowDetailsTemplate? - PullRequest
0 голосов
/ 04 марта 2011

Я смотрел на какой-то код для определения RowDetailsTemplate в одном из моих наборов данных Silverlight и думал о его рефакторинге, потому что он выглядел так, как будто он имел повторяющиеся сетки. Посмотрев на это, я подумал, что мне понадобится только одна сетка данных, но, как оказалось, эта странная, таинственная двойная сетка необходима, чтобы все элементы выстроились в ряд:

<data:DataGrid.RowDetailsTemplate>
<DataTemplate>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition  />
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition />
        </Grid.RowDefinitions>

        <Grid>
             <Grid.ColumnDefinitions>
                 <ColumnDefinition  />
                 <ColumnDefinition  />
                 <ColumnDefinition />
              </Grid.ColumnDefinitions>
              <Grid.RowDefinitions>
                  <RowDefinition MinHeight="20" />
                  <RowDefinition MinHeight="25" />
                  <RowDefinition MinHeight="25"  />
              </Grid.RowDefinitions>
              <TextBlock Grid.Row="0" Grid.Column="0" Text="Attendee Cap" Margin="0,0,50,0" />
              <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding AttendeeCap}"/>

              <TextBlock Text="Start Date" Grid.Row="1" Grid.Column="0" Margin="0,0,50,0" />
              <controls:DatePicker SelectedDate="{Binding StartDate, Mode=TwoWay}"  Grid.Row="1" Grid.Column="1"/>
             <input:TimePicker Value="{Binding StartDate, Mode=TwoWay}"   Grid.Row="1" Grid.Column="2" MinWidth="65" />

             <TextBlock Text="End Date" Grid.Row="2" Grid.Column="0" Margin="0,0,50,0" />
             <input:TimePicker Value="{Binding EndDate, Mode=TwoWay}"   Grid.Row="2" Grid.Column="2" MinWidth="65" />
            <controls:DatePicker SelectedDate="{Binding EndDate, Mode=TwoWay}"  Grid.Row="2" Grid.Column="1" />
        </Grid>
     </Grid>
</DataTemplate>

Я думал, что смогу избавиться от первого определения сетки и просто оставить тот, который находится прямо перед контентом. Проблема в том, что если я избавлюсь от этой сетки, текстовое поле, средство выбора данных и средство выбора времени не появятся.

Я пропускаю неписаное правило о RowDetailsTemplate, которое вызывает такое поведение вуду?

1 Ответ

0 голосов
/ 04 марта 2011

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

Если у вас есть элементы внутри сетки, они автоматически помещаются в столбец 0, строку 0, если не указано иное. Это означает, что ваша внутренняя сетка помещается в первый столбец (столбец 0) внешней сетки, потому что она не имеет записи Grid.Column="". Этот столбец в настоящее время использует 1 / 3 доступной ширины его родительского контейнера. IOW, внешняя сетка используется для ограничения внутренней сетки.

Вы можете попробовать использовать Snoop , чтобы определить, что происходит с вашими текущими и измененными макетами, или вы можете добавить границы к сеткам, чтобы вы могли видеть их точные позиции после рендеринга.

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