В следующем примере всякий раз, когда размер сетки изменяется, размер области отсечения остается таким, как он выражен в абсолютных координатах.
<Grid Clip="M10,10 L10,150 L150,150 L150,10 Z">
<Rectangle Fill="Red"/>
</Grid>
Можно ли каким-то образом обрезать область таким образом, чтобы геометрия отсечения масштабировалась вместе с отсеченным объектом?
Решения кода позади не принимаются, потому что это должно использоваться в шаблоне управления. Кроме того, для наглядности область в примере имеет простую форму. Фактически используемый регион имеет сложную и асимметричную форму.
РЕДАКТИРОВАТЬ:
Похоже, я должен быть более конкретным. Это фрагмент, который является частью шаблона настраиваемого элемента управления для ProgressBar. При масштабировании внешней сетки прямоугольник PART_Indicator не масштабирует область отсечения. Правильная композиция - размер сетки 200x200.
<Grid>
<Path Name="PART_Track"
Data="M100,0 A100,100 0 1 0 100,200 A100,100 0 1 0 100,0 Z"
Fill="AliceBlue" Stretch="Fill"/>
<Rectangle Clip="M100,0 A100,100 0 1 0 100,200 A100,100 0 1 0 100,0 Z"
Stretch="Fill"
Name="PART_Indicator" Fill="Red"
Height="100" VerticalAlignment="Top"/>
<Path Name="Border" Data="M100,0 A100,100 0 1 0 100,200 A100,100 0 1 0 100,0 Z"
Stretch="Fill" StrokeThickness="3" Stroke="Black"/>
</Grid>
ОБНОВЛЕНИЕ: Рик дал отличное предложение, хотя мне потребовалось время, чтобы понять, как его использовать. Вот окончательный код.
<Viewbox StretchDirection="Both" Stretch="Fill" >
<Grid>
<Path Name="PART_Track"
Data="M100,0 A100,100 0 1 0 100,200 A100,100 0 1 0 100,0 Z"
Fill="AliceBlue" Stretch="Fill"/>
<Border Clip="M100,0 A100,100 0 1 0 100,200 A100,100 0 1 0 100,0 Z"
Height="200" VerticalAlignment="Bottom">
<Rectangle Name="PART_Indicator" Fill="Red" VerticalAlignment="Bottom"
Height="40"/>
</Border>
<Path Name="Border"
Data="M100,0 A100,100 0 1 0 100,200 A100,100 0 1 0 100,0 Z"
StrokeThickness="3"
Stretch="Fill" Stroke="Black"/>
</Grid>
</Viewbox>