Следуя примеру книги «Разработка WPF Control Unleashed», я модифицировал ProgressBar, чтобы вместо этого отобразить круговой таймер. Это содержит дугу, которая вращается против часовой стрелки вокруг центра окна (в зависимости от значения моего ProgressBar).UIElement.Rendersize не уменьшает масштаб окна при изменении размера окна
Мои Arc
-класс наследует от System.Windows.Shapes.Shape
и я использую RenderSize.Width
и RenderSize.Height
Свойства, чтобы масштабировать его в зависимости от моего Windowsize.
Это, казалось, сработало нормально, но визуализация только кажется увеличение. Таким образом, моя дуга отлично масштабируется, когда я расширяю окно, содержащее ProgressBar, но когда я уменьшаю его размер, размер дуги не уменьшается.
My ControlTemplate содержит сетку, в которой настроены все элементы (включая дугу), поэтому все остальные элементы, которые не зависят напрямую от RenderSize (некоторые эллипсы и текстовые блоки), масштабируются вверх и вниз по желанию.
Есть ли у вас идеи, почему RenderSize ведет себя так, как описано, и какие значения я мог бы использовать вместо этого для вычисления координат x/y начала/конца дуги?
Примечание: если я установить width
и height
сетки к фиксированному значению, RenderSize не меняется на все, что сбивает с толку меня еще больше, так как эллипсов и текстовое поле шкалы соответственно уже в сетке.
звуки действительны до сих пор, но как вы определяете InnerRadius и OuterRadius, не зная размер ограничивающей рамки? Это то, что я использовал RenderSize для. –
Вы используете нормированные координаты/радиусы, например, InnerRadius = 0,9, OuterRadius = 1.Настройка Stretch = Uniform on the Arc автоматически масштабирует ее родительскую. –
Но я должен признать, что в прошлом у меня было несколько проблем с масштабированием с помощью Shapes, иногда они становились слишком большими, пока я не закодировал их ширину/высоту. Не уверен, когда это произойдет. Если вы установите ширину и высоту на самой Progressbar, вы должны быть в порядке. –