質問

I automatically draw several Canvases in code behind. So how I can handling events of each canvas?

Add canvases to stack panel and trying to add handler to each canvas:

 for (int i = 0; i < canvases.Count; i++)
 {

     canvases[i] = new Canvas();
     canvases[i].Width = sheetWidth;
     canvases[i].Height = sheetHeight;
     canvases[i].Background = Brushes.White;

     canvases[i].MouseWheel += new MouseWheelEventHandler((object sender,MouseWheelEventArgs e) =>
     {

          double ScaleRate = 1.00000001;

          ScaleTransform scaletransform = new ScaleTransform();

          if (e.Delta > 0)
          {
              scaletransform.ScaleX *= ScaleRate;
              scaletransform.ScaleY *= ScaleRate;
          }
          else
          {
              scaletransform.ScaleX /= ScaleRate;
              scaletransform.ScaleY /= ScaleRate;
          }

          canvases[i].RenderTransform = scaletransform;
    });

    stackPanel.Children.Add(canvases[i]);

 }

Throws System.IndexOutOfRangeException in this form, when I trying to move the mouse wheel...

役に立ちましたか?

解決

Try to change your code like this:

for (int i = 0; i < canvases.Count; i++)
{
    canvases[i] = new Canvas();
    canvases[i].Width = sheetWidth;
    canvases[i].Height = sheetHeight;
    canvases[i].Background = Brushes.White;
    canvases[i].RenderTransform = new ScaleTransform(); // here !!!

    canvases[i].MouseWheel += (sender, e) =>
    {
        double ScaleRate = 1.00000001; // really ??

        var canvas = (Canvas)sender;
        var scaletransform = (ScaleTransform)canvas.RenderTransform;

        if (e.Delta > 0)
        {
            scaletransform.ScaleX *= ScaleRate;
            scaletransform.ScaleY *= ScaleRate;
        }
        else
        {
            scaletransform.ScaleX /= ScaleRate;
            scaletransform.ScaleY /= ScaleRate;
        }
   };

   stackPanel.Children.Add(canvases[i]);

}

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top