Ответ 1
<Canvas>
<Canvas.LayoutTransform>
<ScaleTransform ScaleX="1" ScaleY="-1" CenterX=".5" CenterY=".5" />
</Canvas.LayoutTransform>
</Canvas>
У меня есть куча точек данных, которые я хотел бы привязать к точке на двухсторонней привязке к точкам на холсте.
Точки предполагают, что большие значения y отражаются в направлении вверх, как и большинство математических графиков.
Как изменить начало x, y холста в нижнем левом углу и отменить его интерпретацию координаты y?
(Я хотел бы остаться в XAML)
<Canvas>
<Canvas.LayoutTransform>
<ScaleTransform ScaleX="1" ScaleY="-1" CenterX=".5" CenterY=".5" />
</Canvas.LayoutTransform>
</Canvas>
Если вы используете привязку данных, вы можете использовать TypeConvertor, но для этого вам нужно выйти за пределы XAML, и вам нужно знать размер полотна заранее.
Я бы, вероятно, создал пользовательскую панель вместо Canvas и придавал ей прикрепленные свойства, которые имеют смысл для ваших нужд. Ниже приведен пример реализации пользовательской панели:
http://blog.boschin.it/articles/silverlight-radialpanel.aspx
Что-то вроде Canvas очень просто, так как вам не нужно много делать в мерах и устраивать переопределения.
Вы также можете унаследовать Canvas и переопределить ArrangeOverride, я не пробовал это, но он может работать.
Я широко использовал метод ScaleTransform: он не работает. Он сдвигает только одну из двух координат, и никогда. Это, однако, работает так, как рекламируется:
<Canvas Name="myCanvas" Width="0" Height="0" RenderTransform="1 0 0 -1 0 0"
HorizontalAlignment="Center" VerticalAlignment="Center" >