Итак, простой вопрос, я уверен, что вы более опытные люди из WPF, но у меня есть простое задание (в WinForms), что у меня возникли некоторые проблемы при реализации в WPF. Когда я сталкиваюсь с чем-то подобным в WPF, это обычно означает, что есть функция, о которой я не знаю, но я не смог найти никаких примеров. Вот проблема:
Представьте себе холст, на котором отображается изображение. Поверх этого изображения у меня есть прямоугольник большого размера, которым может манипулировать пользователь. Я хочу, чтобы вся область за пределами этого прямоугольника была замаскирована полупрозрачным цветом. В WinForms я бы просто переопределил OnPaint, добавил область исключения в мой объект Graphics, а затем залил объект Graphics моим полупрозрачным цветом.
Итак, мое первое желание было переопределить OnRender для моего Canvas и сделать то же самое, используя DrawingContext. Итак, я попробовал это в качестве теста:
protected override void OnRender( DrawingContext dc )
{
base.OnRender( dc );
var clipRect = new Rect( 128, 128, 1024, 462 );
dc.PushClip( new RectangleGeometry( clipRect ) );
var bounds = new Rect( 0, 0, this.ActualHeight, this.ActualWidth );
dc.DrawRectangle( new SolidColorBrush( Colors.White.ApplyAlpha( 128 ) ), null, bounds );
}
Без кубиков; На самом деле OnRender никогда не стреляет.
По своему опыту работы с WPF (с большинством вещей на самом деле) я понял, что когда что-то, что кажется простым, на самом деле сложно, я делаю это неправильно. Итак, какой-нибудь совет, как установить цвет маски с областью клипа? Заранее спасибо.