https://www.cnblogs.com/wywnet/p/3993161.html
https://www.cnblogs.com/RedSky/p/11386998.html
主要使用:
var st = new ScaleTransform();
canvas.LayoutTransform = st;
canvas.MouseWheel += (sender, e) =>
{
if (e.Delta > 0)
{
st.ScaleX *= 2;
st.ScaleY *= 2;
}
else
{
st.ScaleX /= 2;
st.ScaleY /= 2;
}
};
而不是:
canvas.RenderTransform = st;
但LayoutTransform是在布局之前执行工作,会影响其他元素,而RenderTransform不会影响其他元素。
2、响应键盘事件
scrollViewer.KeyDown += ScrollViewer_KeyDown;
void ScrollViewer_KeyDown(object sender, KeyEventArgs e)
{
if (e.Handled) return;
if (e.OriginalSource == canvas) return;
var canvasEventArgs =
new KeyEventArgs(e.KeyboardDevice, e.InputSource, e.Timestamp, e.Key)
{
RoutedEvent = e.RoutedEvent,
Source = canvas,
};
canvas.RaiseEvent(canvasEventArgs);
e.Handled = canvasEventArgs.Handled;
}
3、控件生命周期
> BeginInit
> EndInit
> OnInitialized
> MeasureOverride
> ArrangeOverride
> GetLayoutClip
> OnRender
> OnRenderSizeChanged
> MeasureOverride
> ArrangeOverride
> Loaded
> OnContentRendered