Solved!
Next code draws on Image and adds Image to Canvas without VisualCollection:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
canvas = new Canvas();
canvas.Width = 300;
canvas.Height = 300;
this.Content = canvas;
this.Loaded += MainWindow_Loaded;
}
Canvas canvas;
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
DrawingVisual dv = new DrawingVisual();
DrawingContext dc = dv.RenderOpen();
dc.DrawRectangle(Brushes.Red, new Pen(Brushes.Red, 5), new Rect(10, 10, 100, 100));
dc.Close();
RenderTargetBitmap bmp = new RenderTargetBitmap(180, 180, 0, 0, PixelFormats.Pbgra32);
bmp.Render(dv);
Image image = new Image();
image.Source = bmp;
canvas.Children.Add(image);
}
}