Silverlight ItemsControl форматирование - PullRequest
2 голосов
/ 05 сентября 2011

У меня есть ItemsControl в Silverlight для отображения списка объектов. Эти объекты содержат строки Name, Value и Unit, такие как «Load», «100» и «MW». Элемент управления находится в столбце сетки, размер которого может варьироваться в зависимости от размера окна браузера. Я пытаюсь отформатировать DataTemplate, чтобы строка имени находилась слева, а значение и единица - справа. например ...

|Load      100 MW |
|Load2      50 MW |
|Unit1      20 X  |
|Unit2     130 YXZ|

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

|Load       100 MW|
|Load2       50 MW|
|Unit1        20 X|
|Unit2     130 YXZ|

У меня заканчиваются идеи о том, как это отформатировать. Кто-нибудь может предложить что-нибудь? Суть в том, что я заранее не знаю длины строки имени, значения или единицы измерения, и когда основной столбец меняет размер, имя должно оставаться слева, а значение и единица справа.

Заранее спасибо, шапка

(здесь код пока)

<ItemsControl Name="DataTypesGrid" ItemsSource="{Binding}" Margin="0,8,0,0" BorderBrush="{x:Null}" Foreground="White" Background="{x:Null}" IsEnabled="True">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Vertical" Margin="0,2,0,0" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>

    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid Width="Auto">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding Name}" HorizontalAlignment="Left" Grid.Column="0"/>
                <StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right">
                    <TextBlock Text="{Binding Value}" HorizontalAlignment="Right" Margin="0,0,4,0"/>
                    <TextBlock Text="{Binding Unit}" HorizontalAlignment="Right"/>
                </StackPanel>
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

1 Ответ

2 голосов
/ 05 сентября 2011

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

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

Некоторые альтернативы:

  • Установите минимальную ширину на вашем блоке юнитов, чтобы меньшие юниты, по крайней мере, выравнивались.
  • Рассчитать фактическую ширину самой широкой единицы и применить это значение к привязке ширины (используется для всех текстовых блоков «единиц»)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...