У меня есть 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>