【问题标题】:Canvas overlaps parent border画布与父边框重叠
【发布时间】:2014-07-02 05:06:22
【问题描述】:

我正在努力解决布局问题。我的用户控件包含一个边框,以画布作为子项。 此画布包含一个网格,而该网格包含 2 个画布(1 列和 2 行不同颜色)。

我的问题是网格与他右侧的边框重叠,我不知道为什么。我尝试将主画布的 ClipToBounds 属性设置为“True”,但没有任何效果。

你能帮帮我吗?

问题来了:

这里是代码:

<Border Name="MainBorder" BorderBrush="Black" BorderThickness="1">
   <Canvas Name="MainCanvas" Height="30" ClipToBounds="True">
      <Grid Width="{Binding ElementName=MainCanvas, Path=ActualWidth}">
          <Grid.RowDefinitions>
              <RowDefinition Height="5" />
              <RowDefinition Height="5" />
          </Grid.RowDefinitions>
          <Grid.ColumnDefinitions>
              <ColumnDefinition />
          </Grid.ColumnDefinitions>

          <Canvas Name="CanvasTop" Grid.Row="1" Grid.Column="0" Background="Beige" />
          <Canvas Name="CanvasBottom" Grid.Row="0" Grid.Column="0" Background="LightGray" />
      </Grid>
   </Canvas>
</Border>

感谢您的帮助。

【问题讨论】:

  • 我试过你的代码,但没有得到描述的行为。是你用来截屏的代码吗?
  • 同意 Fdooch。发布的代码不会产生效果,或者像截图一样远程
  • 嗯...发布的 xaml 是正确的,没有进行任何修改...我将调查代码隐藏。我当然错过了什么。

标签: c# wpf xaml


【解决方案1】:

我认为是您的 Width="{Binding ElementName=MainCanvas, Path=ActualWidth}" 行导致了这种情况。

你可以试试 Horizo​​ntalAlignment="Stretch" 代替 width 属性吗?这将确保它使用整个宽度

【讨论】:

  • 很遗憾,布局系统在 Canvas 元素中不起作用。
  • 对不起,我只是猜测,我尝试了代码,但无法重现问题
【解决方案2】:

问题解决了,代码隐藏中有一个函数以错误的方式调整了控件的大小:

public void SetMainCanvasWidth(double size)
{
    Width = Math.Max(2, size); // that line was evil. removed it and it runs
    MainCanvas.Width = Math.Max(2, size);
}

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2020-04-01
    相关资源
    最近更新 更多