は、テンプレート内のListBoxItem
によってクリップされています。これを回避するには、テンプレートからを削除する必要があると思います。スクロールが必要な場合は、をラップすることができます。ScrollViewer
ListBox
ScrollViewer
ListBox
ScrollViewer
<ScrollViewer HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
<ListBox Margin="100,10,0,0">
<ListBox.Template>
<ControlTemplate TargetType="{x:Type ListBox}">
<Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="1" SnapsToDevicePixels="true">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</ListBox.Template>
<ListBox.ItemTemplate>
<DataTemplate>
<Rectangle Fill="Red" Stroke="Green" StrokeThickness="4" Width="100" Height="50">
<Rectangle.RenderTransform>
<TranslateTransform X="-50" />
</Rectangle.RenderTransform>
</Rectangle>
</DataTemplate>
</ListBox.ItemTemplate> 42
</ListBox>
</ScrollViewer>
アップデート
ScrollViewer
テンプレート内のは、次のように生成されScrollContentPresenter
ます。GetLayoutClip
protected override Geometry GetLayoutClip(Size layoutSlotSize)
{
return new RectangleGeometry(new Rect(base.RenderSize));
}
このクラスはSealedであるため、このクラスから派生してこのメソッドをオーバーライドすることはできません。ScrollContentPresenter
あなたはあなた自身(例えば)を実装しなければならずMyScrollContentPresenter
、おそらくあなた自身もこれを機能させるためにScrollViewer
使用します(そしてあなたがこのメソッドに戻ると、境界より下のいくつかのアイテムも見えるようになると思います)MyScrollContentPresenter
null
ListBox