Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Центровать рисунок на Canvas / 1 сообщений из 1, страница 1 из 1
16.02.2010, 11:18
    #36471958
ifndef
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Центровать рисунок на Canvas
Итак, пишем приложение на WPF

Есть примерно такой класс:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
class Circle
{
    public double X {get;set;}
    public double Y {get;set;}
    public double Diameter {get;set;}
    public static double Height {get;set;}
    public static double Width {get;set;}
}

Есть список объектов этого класса. И хочется их отобразить в виде собственно кружочков, причем так, чтобы весь получившийся рисунок оказался в центре отведенной ему области. Используем для этого класс ListBox и задаем ему вот такой темплейт:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
<ControlTemplate TargetType="{x:Type ListBoxItem}">
	<Canvas x:Name="canvas">
		<Canvas.Resources>
			<conv:TranslateConverter x:Key="TranslateConverter" />
		</Canvas.Resources>

		<Ellipse
			Width="{Binding Diameter}"
			Height="{Binding Diameter}"
			Stroke="Azure"
			Fill="Transparent"
			StrokeThickness="2"
		>
			<Canvas.Left>
				<MultiBinding Converter="{StaticResource TranslateConverter}">
					<Binding ElementName="canvas" Path="ActualWidth" />
					<Binding Path="Width" />
					<Binding Path="Diameter" />
					<Binding Path="X" />
				</MultiBinding>
			</Canvas.Left>

			<Canvas.Top>
				<MultiBinding Converter="{StaticResource TranslateConverter}">
					<Binding ElementName="canvas" Path="ActualHeight" />
					<Binding Path="Height" />
					<Binding Path="Diameter" />
					<Binding Path="Y" />
				</MultiBinding>
			</Canvas.Top>
		</Ellipse>		
	</Canvas>
</ControlTemplate>

Конвертер под названием TranslateConverter как раз и сдвигает наш кружочек на нужное место (в зависимости от размеров канваса и всего рисунка).

И тут возникает проблема. По оси X все сдвигается нормально, а по Y нет, потому что ActualHeight всегда приходит равным 0. Если задать Height и Width канваса прямо в разметке, все работает. Более того, ActualWidth тоже какое-то время назад приходил только нулевой, а потом почему-то перестал.

Кто знает, поделитесь решением проблемы.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Центровать рисунок на Canvas / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]