В Python 2.6 + и 3.0 +, Вы использовали бы format()
строковый метод:
for i in (1, 10, 100):
print('{num:02d}'.format(num=i))
или использование встроенного (для единственного числа):
print(format(i, '02d'))
Посмотрите документация PEP-3101 для новых функций форматирования.
Try a grid around your ScrollViwer
instead of the StackPanel
. I think StackPanel
will provide as much height as the internal content wants, so here the Scrollviwer
doesn't work properly since its height is not get restricted by its parent control.
You can understand the issue from the example below.
<StackPanel>
<ScrollViewer>
<ItemsControl >
<Rectangle Stroke="#FFC3C3C3" Height="300" Fill="Black" StrokeThickness="4" Width="200"/>
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" StrokeThickness="4"/>
<Rectangle Stroke="#FFC3C3C3" Height="300" Fill="Black" StrokeThickness="4" Width="200"/>
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" StrokeThickness="4"/>
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" StrokeThickness="4"/>
</ItemsControl>
</ScrollViewer>
</StackPanel>
Above code is similar to yours and it doesn't give you scrollbars. But see the below code in which I changed only the StackPanel
to a Grid
(Any panel which respects the size of its children based on panels size but stackpanel doesn't)
<Grid>
<ScrollViewer>
<ItemsControl >
<Rectangle Stroke="#FFC3C3C3" Height="300" Fill="Black" StrokeThickness="4" Width="200"/>
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" StrokeThickness="4"/>
<Rectangle Stroke="#FFC3C3C3" Height="300" Fill="Black" StrokeThickness="4" Width="200"/>
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" StrokeThickness="4"/>
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" StrokeThickness="4"/>
</ItemsControl>
</ScrollViewer>
</Grid>
UPDATE : But if you really need to use StackPanel
then you might need to set the size for your ScrollViwer
to get the Content scroll
Вы должны исправить высоту Scrollviewer, но можете легко привязаться к StackPanel ActualHeight:
(проверенный код)
<StackPanel Name="mypanel">
<ScrollViewer Height="{Binding ElementName=mypanel, Path=ActualHeight}">
<ItemsControl>
<Rectangle Stroke="#FFC3C3C3" Height="300" Fill="Black" Width="200"/>
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" />
<Rectangle Stroke="#FFC3C3C3" Height="300" Fill="Black" Width="200"/>
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" />
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" />
</ItemsControl>
</ScrollViewer>
</StackPanel>
Или еще лучше, если вы не можете изменить имя StackPanel:
<StackPanel>
<ScrollViewer Height="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type StackPanel}}, Path=ActualHeight}">
<ItemsControl>
<Rectangle Stroke="#FFC3C3C3" Height="300" Fill="Black" Width="200"/>
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" />
<Rectangle Stroke="#FFC3C3C3" Height="300" Fill="Black" Width="200"/>
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" />
<Rectangle Stroke="#FFC3C3C3" Width="200" Height="300" Fill="Black" />
</ItemsControl>
</ScrollViewer>
</StackPanel>
Это проблема «Вы первый», StackPanel запрашивает у ScrollViewer высоту, а ScrollViewer запрашивает у StackPanel высоту максимальная высота.
The ItemsControl
should contain the ScrollViewer
, not the other way around. All that the ScrollViewer
knows about is the ItemsControl
itself in your case - it doesn't know about the inner items.
Try something like this:
<ItemsControl Name="icEvents" Width="Auto" Height="100"
Background="AliceBlue"
ItemsSource="{Binding Path=EventSources}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="Source:"/>
<TextBlock Text="{Binding Path=Source}" />
<TextBlock Text="Original Source:"/>
<TextBlock Text="{Binding Path=OriginalSource}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.Template>
<ControlTemplate TargetType="ItemsControl">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ItemsPresenter Margin="5" />
</ScrollViewer>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>