在 wpf 代码中将画布添加到堆栈面板时出现问题

发布于 2024-07-29 20:39:45 字数 539 浏览 8 评论 0 原文

我有与引用完全相同的问题(采用形式 这里,但没有回答):

我通过以下方式将控件添加到 StackPanel StackPanel.Childrens.Add()。

但我所看到的 - 所有控件均已添加 对我而言,处于相同的位置并且 相互重叠。 他们不是 StackPanel 内部的布局。

甚至 StackPanel.UpdateLayout( ) 也会带来 我什么都没有。

我正在尝试将 Canvases(是的,我确实需要它们)添加到 StackPanel 中。 有任何想法吗?

I have the exact same problem as quoted (taken form here , but not answered) :

I add controls to the StackPanel via
StackPanel.Childrens.Add( ).

But what i see - all controls, added
by me, are in the same position and
overlap each other. They don't being
layout inside of StackPanel.

Even StackPanel.UpdateLayout( ) brings
me nothing.

I for me am trying to add Canvases (yes I do need them) to the StackPanel.
Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

熟人话多 2024-08-05 20:39:45

您是否在画布上设置了明确的尺寸? 画布的大小不会适应其内容,因此除非您明确指定画布的大小,否则当您将它们全部放入堆栈面板中时,它们的内容将显示在彼此的顶部,正如您所解释的。 这是因为画布子项相对于的 (0,0) 位置将是 stackpanel 的左上角(所有画布及其所有子项的同一点)。

Kaxaml 中尝试以下操作来突出显示这种情况:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <StackPanel>
    <Canvas>
      <TextBlock Text="Child of canvas one" />
    </Canvas>
    <Canvas>
      <TextBlock Text="Child of canvas two" />
    </Canvas>
  </StackPanel>
</Page>

您会看到两行文本叠加在一行文本之上其他。

现在,试试这个:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <StackPanel>
    <Canvas Height="15">
      <TextBlock Text="Child of canvas one" />
    </Canvas>
    <Canvas Height="15">
      <TextBlock Text="Child of canvas two" />
    </Canvas>
  </StackPanel>
</Page>

您将看到您想要的间距。

希望有帮助。

Have you set explicit sizes on your canvases? Canvases don't size to fit their content, so unless you specify the size of the canvas explicitly, when you put them all in a stack panel, their contents will appear on top of each other, as you explain. This is because the (0,0) position to which canvas children are positioned relative to will be the top-left of the stackpanel (the same point for all canvases and all their children).

Try the following in Kaxaml to highlight the situation:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <StackPanel>
    <Canvas>
      <TextBlock Text="Child of canvas one" />
    </Canvas>
    <Canvas>
      <TextBlock Text="Child of canvas two" />
    </Canvas>
  </StackPanel>
</Page>

You'll see the two lines of text are superimposed on top of one another.

Now, try this:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <StackPanel>
    <Canvas Height="15">
      <TextBlock Text="Child of canvas one" />
    </Canvas>
    <Canvas Height="15">
      <TextBlock Text="Child of canvas two" />
    </Canvas>
  </StackPanel>
</Page>

And you'll see the spacing you desire.

Hope that helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文