Обрезать трансформацию в WPF? - PullRequest
2 голосов
/ 27 апреля 2011

WPF позволяет использовать подклассы Transform для масштабирования (ScaleTransform), поворота (RotateTransform), перекоса () SkewTransform) и т. Д. На любой FrameworkElement.

Но я не вижу, как обрезать некоторые FrameworkElement, используя их. Можно ли как-нибудь обрезать, скажем, Label шириной 30 пикселей, чтобы он вел себя так, как если бы его ширина была 20 пикселей?

Если быть более точным: я хочу сделать это перед разметкой, чтобы Label был разложен так, как если бы его ширина была 20. Но я хочу, чтобы он был полностью отрисован, так что последние 10 пикселей будут отрисованы тоже (возможно, перекрывая другие элементы). Как я могу это сделать?

Зачем мне это нужно? Я хочу сделать H.B. ответ на мой вопрос Создать редактор гитарных аккордов в WPF для работы с kerning .

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Используйте отрицательный Margin на ярлыке, например, Margin="0,0,-10,0" делает ярлык на 10 пикселей короче справа в плане расположения.(Чтобы избежать наложения, поместите его в контейнер и установите ClipToBounds="True")

0 голосов
/ 15 ноября 2013

Моя проблема с решением HB заключалась в том, что я не могу связать только верхнее поле.

Я использую XAML, как этот, чтобы построить вид круглого индикатора выполнения (эллипс, который обрезается сверху):

<Canvas Name="ProgressIndicator" Width="120" Height="{Binding ProgressIndicatorHeight}" ClipToBounds="True">
    <Ellipse Width="120" Canvas.Bottom="0" Height="120" Fill="#FF7090B7"/>
</Canvas>

Когда я изменяю высоту холста, верх эллипса обрезается (потому что он выровнен по низу холста).если я выровняю его по верху (по умолчанию), он будет обрезан снизу.

Я использую эту конструкцию внутри круглого значка, чтобы заполнить ее пропорционально прогрессу.

...