「サイズを入れなければいいんじゃない?」と思いましたが、配置法によってはそうもいかないですかね。
「wpf cliptobounds not work」あたりのキーワードで検索したところ↓が出ました。
ClipToBounds="Maybe" « Dr. WPF
GetLayoutClip
をオーバーライドしてみたら、クリップされなくなりました(よくわかっていません^^;
Path
はsealedクラスでしたので元からパクりました(internalメンバがいないことによるパフォーマンスペナルティは不明)
Path.cs
xml
1<Window
2 x:Class="Questions340797.MainWindow"
3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5 xmlns:local="clr-namespace:Questions340797"
6 Width="800"
7 Height="450">
8 <DockPanel>
9 <StackPanel DockPanel.Dock="Bottom">
10 <CheckBox x:Name="checkBox" Content="ClipToBounds" />
11 <Slider
12 x:Name="x"
13 Maximum="50"
14 Minimum="-50" />
15 <Slider
16 x:Name="y"
17 Maximum="50"
18 Minimum="-50" />
19 </StackPanel>
20
21 <Grid>
22 <Grid.ColumnDefinitions>
23 <ColumnDefinition />
24 <ColumnDefinition />
25 <ColumnDefinition />
26 </Grid.ColumnDefinitions>
27
28 <GroupBox Header="Original">
29 <Path
30 Width="50"
31 Height="50"
32 ClipToBounds="{Binding IsChecked, ElementName=checkBox}"
33 Fill="Red">
34 <Path.Data>
35 <EllipseGeometry RadiusX="50" RadiusY="50">
36 <EllipseGeometry.Transform>
37 <TranslateTransform X="{Binding Value, ElementName=x}" Y="{Binding Value, ElementName=y}" />
38 </EllipseGeometry.Transform>
39 </EllipseGeometry>
40 </Path.Data>
41 </Path>
42 </GroupBox>
43
44 <GroupBox Grid.Column="1" Header="No Size">
45 <Path
46 HorizontalAlignment="Center"
47 VerticalAlignment="Center"
48 ClipToBounds="{Binding IsChecked, ElementName=checkBox}"
49 Fill="Red">
50 <Path.Data>
51 <EllipseGeometry RadiusX="50" RadiusY="50">
52 <EllipseGeometry.Transform>
53 <TranslateTransform X="{Binding Value, ElementName=x}" Y="{Binding Value, ElementName=y}" />
54 </EllipseGeometry.Transform>
55 </EllipseGeometry>
56 </Path.Data>
57 </Path>
58 </GroupBox>
59
60 <GroupBox Grid.Column="2" Header="MyPath">
61 <local:MyPath
62 Width="50"
63 Height="50"
64 ClipToBounds="{Binding IsChecked, ElementName=checkBox}"
65 Fill="Red">
66 <local:MyPath.Data>
67 <EllipseGeometry RadiusX="50" RadiusY="50">
68 <EllipseGeometry.Transform>
69 <TranslateTransform X="{Binding Value, ElementName=x}" Y="{Binding Value, ElementName=y}" />
70 </EllipseGeometry.Transform>
71 </EllipseGeometry>
72 </local:MyPath.Data>
73 </local:MyPath>
74 </GroupBox>
75 </Grid>
76 </DockPanel>
77</Window>
cs
1using System.Windows;
2using System.Windows.Media;
3using System.Windows.Shapes;
4
5namespace Questions340797
6{
7 public sealed class MyPath : Shape
8 {
9 public static readonly DependencyProperty DataProperty
10 = DependencyProperty.Register(nameof(Data), typeof(Geometry), typeof(MyPath),
11 new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsRender), null);
12 public Geometry Data { get => (Geometry)GetValue(DataProperty); set => SetValue(DataProperty, value); }
13
14 protected override Geometry DefiningGeometry
15 {
16 get
17 {
18 var data = Data;
19 if (data == null) data = Geometry.Empty;
20 return data;
21 }
22 }
23 protected override Geometry GetLayoutClip(Size layoutSlotSize)
24 => ClipToBounds ? base.GetLayoutClip(layoutSlotSize) : null;
25 }
26
27 public partial class MainWindow : Window
28 {
29 public MainWindow() => InitializeComponent();
30 }
31}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/29 10:08
2021/05/29 10:15