Как создать растягивающийся прямоугольник отсечения в Silverlight

#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 . Его функция заключается в отсечении, а не в изменении размеров или выравниваний. Свойства выравнивания совершенно не имеют отношения к вопросу.