How to resize a Canvas in WPF?
I'm writing a WPF app that has a Canvas
in it. This canvas will be custom rendered at runtime. It's sort of like a game in that it needs to be measured in pixels. I need to be able to set my Canvas
to 478x478 pixels (client rectangle size). I don't want any scaling or other resolution-independent steps to take place on my Canvas
.
I'm not sure if this is possible in WPF, since its nature is to be resolution independent. My questions:
- How do I resize my
Canvas
at runtime (function to call?) - When I resize my
Canvas
, is the renderable area (the client rectangle) going to be that size? If not, how can I resize it to make sure the client rectangle is a specific width/height? - Is it possible to set the width/height of the
Canvas
in Pixels? How does the resolution-independent aspect of WPF interfere with what I'm trying to do? - When I resize my
Canvas
, will other controls resize appropriately as they have bee开发者_运维知识库n designed to do in the WPF designer?
Thanks in advance.
Any elements positioned in a canvas will not resize or reposition based upon the size of the canvas. So I don't think there's any advantage to setting the size of the canvas. Maybe you should just set a fixed size of the window instead.
Otherwise, just set the Canvas.Width, Height, and ClipToBounds=True and you have a fixed sized canvas that positions its child elements with X/Y coordinates.
Also you should be sure to set SnapsToDevicePixels=True on the canvas so that child elements will have crisp pixel-aligned bounds.
resizing is cake:
MyCanvas.Width = 350;
MyCanvas.Height = 450;
this sets the size, you CAN render to coordinates outside of this, but it will be clipped. You can wrap your canvas inside a scroller to allow the user to see what is outside the height/width of the canvas.
as for the rest of your questions, i think you can see this SO question for your answers
Update 2020: on WPF .NET CORE: If the Canvas
is a child of a Viewbox
, the content is automatically scaled to the Viewbox
height and width.
<Viewbox Stretch="Fill"
Width="50"
Height="50">
<Canvas>
<Path.... />
</Canvas>
</Viewbox>
精彩评论