有没有办法使用鼠标拖动/调整画布大小?

3

我正在使用一个包含Expander的画布,当展开Expander时,它将覆盖在下面的控件上。

        <Canvas Grid.Row="0" Panel.ZIndex="99">
            <Border Width="450" BorderThickness="1">
                <Expander etc />
            </Border>
        </Canvas>
        <OtherControls Grid.Row="1"/> etc

有没有一种方法可以允许用户拖动画布的大小,而不是设置画布的大小?


但是你没有设置画布的大小。或者你是指“而不是设置边框的大小”?但是如果您不想设置显式大小,则画布只有在您想要显式大小时才有用-如果您不想设置显式大小,则不应使用画布。 - Joe White
也许你应该详细说明为什么要使用Canvas。根据你所描述的,我看不出来为什么相比于将多个控件放在同一Grid.Row中,Canvas会对你有任何好处。 - Joe White
@Joe White 在编程时,使用Canvas在处理坐标方面具有一定的优势。例如,我可以使用Canvas.GetTop(x),而这在Grid中是无法使用的。 - olix20
1个回答

0

这里有一个想法:把所有东西都放在网格中。让网格自动调整大小,将画布放在网格中(确保它占据整个网格),以便它会跟随父元素的大小:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>

    <Canvas Background="Transparent" Grid.RowSpan="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>

    <Border Width="450" BorderThickness="1">
            <Expander etc />
    </Border>

    <OtherControls Grid.Row="1"/>
</Grid>

不确定这可能有多相关,但看看这篇文章。也许它会给你一些想法(我写了这篇文章4年前,太久远了无法记住具体细节,但代码可以编译和运行):

http://denismorozov.blogspot.com/2008/01/how-to-resize-wpf-controls-at-runtime.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接