#silverlight #clipping
#silverlight #отсечение
Вопрос:
Поскольку Silverlight не имеет удобной функции свойств ClipToBounds для элементов управления, мне приходится определять формы отсечения самостоятельно. Мне было интересно, могу ли я создать прямоугольник отсечения, соответствующий размеру моего элемента управления. Есть предложения?
Ответ №1:
Если в вашем макете есть существующий элемент управления, который вы хотите динамически обрезать, используйте его SizeChanged
событие. Допустим, например, вы хотите обрезать эту сетку:-
<Grid SizeChanged="Grid_SizeChanged" Width="50" Height="20">
<Grid.Clip>
<RectangleGeometry />
</Grid.Clip>
<TextBlock Margin="0 -9 0 0" Text="This text should not be legible" />
</Grid>
С помощью кода, лежащего в основе:-
private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
{
((RectangleGeometry)((Grid)sender).Clip).Rect = new Rect(0.0, 0.0, e.NewSize.Width, e.NewSize.Height);
}
Для вашего собственного пользовательского элемента управления вы могли бы рассмотреть возможность обработки прямоугольника отсечения в ArrangeOverride
вместо того, чтобы полагаться на событие SizeChanged. В этом случае вы, вероятно, захотите присвоить RectangleGeometry Clip
свойству в коде, а не полагаться на то, что оно назначено в Xaml шаблона по умолчанию.
Комментарии:
1. Я создал поведение для FrameworkElement, которое выполняет то, что вы описали. Теперь у меня есть ClipToBounds в Silverlight! 🙂 Именно то, что я искал! Спасибо!
Ответ №2:
Silverlight поддерживает это: попробуйте использовать свойства HorisontalAlignment и вертикального выравнивания. Установите их на растягивание. Если это не сработает, вам придется опубликовать пример xaml.
Комментарии:
1. Свойства выравнивания не влияют на область отсечения элемента управления.
2. Будут ли работать ClipToBounds, если родительский элемент имеет треугольную форму? Я спрашиваю этот код, если ваш родительский элемент всегда прямоугольный, то свойства выравнивания — это то, что вы ищете.
3. Вы, кажется, совершенно не понимаете, что на самом деле делает WPF
ClipToBounds
. Его функция заключается в отсечении, а не в изменении размеров или выравниваний. Свойства выравнивания совершенно не имеют отношения к вопросу.