gpt4 book ai didi

即使不需要剪辑,WPF 剪辑 - 如何将其关闭?

转载 作者:行者123 更新时间:2023-12-03 23:32:57 30 4
gpt4 key购买 nike

我需要从 ListBox 中浮出一些内容如 DataTemplate 中指定的那样对于 ListBox.ItemTemplate .我正在使用 RenderTransform但内容被剪掉了 ListBox边界。 ClipToBoundsFalse对于整个视觉树。

我在某处读到 WPF 内部会执行一些剪辑,即使没有指定专用剪辑属性。我还发现使用 Canvas有时可以解决剪裁问题,但在这里无济于事。

我怎样才能克服这个问题?这是我想要修复的一些 XAML。请注意矩形的整个左侧部分丢失。

    <ListBox>
<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>

最佳答案

ListBoxItem 's 被 ScrollViewer 剪掉了在 ListBox模板。要解决此问题,我认为您需要删除 ScrollViewer从模板,如果您需要滚动,您可以包装 ListBoxScrollViewer

<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));
}

这个类是密封的,所以你不能从它派生来覆盖这个方法。您必须实现自己的 ScrollContentPresenter (例如 MyScrollContentPresenter),也可能是您自己的 ScrollViewer使用 MyScrollContentPresenter以及使这项工作(如果您在此方法中返回 null,我认为 ListBox 边界以下的某些项目也可能变得可见)

关于即使不需要剪辑,WPF 剪辑 - 如何将其关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4856225/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com