C'è una proprietà ClipToBounds
sulla classe Border
che dovrebbe agganciare il contenuto in i limiti della Border
, ma purtroppo, non 'fare quello che dice sulla latta':
<Border CornerRadius="25" BorderBrush="RoyalBlue" BorderThickness="3" Width="300"
Height="50" ClipToBounds="True"> <!-- This doesn't work as expected -->
<Rectangle Fill="SkyBlue" />
</Border>
Tuttavia, la classe Rectangle
fornisce anche alcune proprietà che potrebbero essere di aiuto. C'è qualcosa che impedisce di solo utilizzando le proprietà Rectangle.RadiusX
e Rectangle.RadiusY
per arrotondare gli angoli Rectangle
?:
<Border CornerRadius="25" BorderBrush="RoyalBlue" BorderThickness="3" Width="300"
Height="50">
<Rectangle RadiusX="23" RadiusY="23" Fill="SkyBlue" />
</Border>
Sono consapevole che si desidera ritagliare il riempimento di colore del Rectangle
, ma si potrebbe utilizzare la proprietà Rectangle.Clip
per questo:
<Border CornerRadius="25" BorderBrush="RoyalBlue" BorderThickness="3" Width="300"
Height="50">
<Grid>
<Rectangle Name="ClipRectangle" Fill="Green" Margin="50,0,0,0"
Visibility="Hidden" />
<Rectangle RadiusX="23" RadiusY="23" Fill="SkyBlue" Clip="{Binding
RenderedGeometry, ElementName=ClipRectangle}" />
</Grid>
</Border>
questa clip colorato Rectangle
con l'RenderedGeometry
dell'altro Rectangle
nome ClipRectangle
... o quando dico questo c labbra, forse avrei dovuto dire questo dovrebbe per clip come ho appena scoperto che questo sembra funzionare solo in WPF Designer e non quando viene eseguita l'applicazione.
Tuttavia, sono fuori tempo qui, quindi speriamo si può trovare il pezzo finale del puzzle e completare da soli. Potenzialmente, è possibile completare questo con il binding dei dati alla proprietà GradientStop.Offset
di LinearGradientBrush
impostata come Background
su Border
, quindi non è necessario nemmeno un Rectangle
per questo metodo. Avrò un'altra occhiata se posso più tardi.
UPDATE >>>
ho avuto un altro sguardo a questo Clip Rectangle
e non può capire perché funziona solo nella progettazione di Visual Studio. Quindi, rinunciando a questa idea, puoi provare l'idea di LinearGradientBrush
, che è ugualmente buona.In primo luogo, definire il Brush
:
<LinearGradientBrush x:Key="ValueBrush" StartPoint="0,0" EndPoint="1,0">
<GradientStop Offset="0.0" Color="SkyBlue" />
<GradientStop Offset="0.7" Color="SkyBlue" />
<GradientStop Offset="0.7" Color="Transparent" />
<GradientStop Offset="1.0" Color="Transparent" />
</LinearGradientBrush>
Per ora, ho hardcoded i valori per produrre questo:
Da solo questo codice:
<Border CornerRadius="25" BorderBrush="RoyalBlue" Background="{StaticResource
ValueBrush}" BorderThickness="3" Width="300" Height="50" ClipToBounds="True" />
Per la vostra requisiti effettivi, è necessario creare una proprietà double
per associare i dati alla proprietà GradientStop.Offset
in questo modo:
<LinearGradientBrush x:Key="ValueBrush" StartPoint="0,0" EndPoint="1,0">
<GradientStop Offset="0.0" Color="SkyBlue" />
<GradientStop Offset="{Binding MidPoint}" Color="SkyBlue" />
<GradientStop Offset="{Binding MidPoint}" Color="Transparent" />
<GradientStop Offset="1.0" Color="Transparent" />
</LinearGradientBrush>
Ora, se si fornisce un valore compreso tra 0.0 e 1.0, questo creerà il misuratore di livello.
Controllare [questo] (http://stackoverflow.com/questions/5649875/wpf-how-to-make-the-border-trim-the-child-elements) domanda. Potrebbe esserti d'aiuto – dkozl
PER VIA per chi guarda questa domanda. La risposta qui sotto. purtroppo con lo 0 voti su di esso. Funziona alla grande. è la strada da percorrere. nessun convertitore. nessuna influenza aggiuntiva sul modello basata su elementi del controllo. semplice ritaglio durante la conservazione. –