【问题标题】:Put a border on the grid in WPF在 WPF 中的网格上放置边框
【发布时间】:2023-03-28 03:58:01
【问题描述】:

有没有办法将Border 放在Grid 上而不用Border 元素包围Grid

<Border Margin="{Binding ElementName=thisUserControl, Path=PrintMargin}"
        BorderThickness="{Binding ElementName=thisUserControl, 
                             Path=PrintMarginThickness}"
        BorderBrush="LightGray">
    <Grid x:Name="mainGrid"
          Background="{Binding ElementName=thisUserControl, Path=Background}" />
</Border>

我可以在网格上使用“BitmapEffect”之类的东西吗? 我只需要在我的 WpfUserControl 上显示或不显示名为“PrintMargin”的边框...

这个边框应该或不可见,也许我需要控制它的厚度,也许还有颜色(画笔)...

【问题讨论】:

  • 为什么不能使用Border 元素?这就是它的...
  • 您不按预期使用它的动机是什么?
  • 我需要网格父级是用户控件本身。
  • 为什么需要 Grid 父级作为 UserControl?
  • 在这种情况下,也许您可​​以命名此网格并通过其名称引用它而不是在 UI 三中的位置?

标签: .net wpf user-controls border


【解决方案1】:

按照您提到的方式(网格周围的边框)没有任何问题,但如果您真的需要,您可以将Border 添加为Grid 中的最后一个元素:

<Grid>
    .. other elements ..
    <Border BorderBrush="DeepPink" BorderThickness="1" />
</Grid>

【讨论】:

  • 如果你真的,真的想这样做(我强烈反对它),让它成为网格中的第一个元素。否则,它可能会与其他元素重叠。这样,其他元素与此重叠。当然,任何重叠都与首先使用边框的想法背道而驰。
  • 我不需要 FIRST 元素,我需要网格本身的边框
  • @serhio - 没错。在网格周围放置一个边框。 &lt;Border&gt;&lt;Grid /&gt;&lt;/Border&gt;
  • 我需要 grid 成为第一个 UserControl 孩子
  • @serhio 您尝试使用错误的工具来完成这项工作。使用设计的边框控件,并将查找根网格的代码更改为(理想情况下)引用 named 网格,或者,如果必须,遍历树直到找到第一个网格。破解没有&lt;border&gt; 的边框只会在以后给您带来麻烦
【解决方案2】:

好吧,几周前我为Button 做了这个,也许您可​​以将样本调整为Grid 控件?

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border Name="border" 
                        BorderThickness="{TemplateBinding BorderThickness}"
                        Padding="{TemplateBinding Padding}" 
                        BorderBrush="{TemplateBinding BorderBrush}" 
                        CornerRadius="5"
                        Margin="{TemplateBinding Margin}"
                        Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

编辑:我猜你将不得不使用Panel 方法而不是ContentPresenter,不知道如何从那里做到这一点,但希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2011-02-15
    • 2013-10-16
    • 1970-01-01
    • 2016-04-08
    • 2020-12-02
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多