【问题标题】:Attribute <Border> around a <TextBlock> bug<TextBlock> 错误周围的属性 <Border>
【发布时间】:2014-08-12 18:37:05
【问题描述】:

我在这里是因为我有一个小问题。我想在我的文本块周围添加一个边框。这是我当前的脚本 (xaml):

<Grid>
    <Border Visibility="Visible" Width="1000" BorderBrush="Blue" BorderThickness="1">
        <TextBlock HorizontalAlignment="Left" Visibility="Visible" Foreground="Blue" TextAlignment="Center" FontSize="20" Margin="10,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="28.96" Width="980"><Run Language="fr-fr" Text="Fiche détails de la capitalisation"/></TextBlock>
    </Border>
    <TextBlock HorizontalAlignment="Left" Margin="10,49.05,0,0" TextWrapping="Wrap" VerticalAlignment="Top"><Run Language="fr-fr" Text="édité le:"/></TextBlock>
    <TextBlock HorizontalAlignment="Left" Margin="390,49.05,0,0" TextWrapping="Wrap" VerticalAlignment="Top"><Run Language="fr-fr" Text="Rafraichissement des données:"/></TextBlock>
</Grid>

我的问题是:即使我将边框属性设置为第一个文本块,它也会应用于我的整个网格,我还没有找到原因。

有人知道为什么吗?

提前致谢。 弗洛里安·塞尔瓦

【问题讨论】:

    标签: c# wpf xaml border textblock


    【解决方案1】:

    您尚未在Grid 中定义任何行或列。从技术上讲,它只有 1 列和 1 行,而您的 Border 适用于该单行/列,因此它似乎包围了整个 Grid

    由于您明确定位元素,请尝试将 &lt;Grid&gt; 替换为 &lt;Canvas&gt;

    【讨论】:

    • 感谢您的评论,即使我使用多个边框属性,此解决方案也能完美运行。
    【解决方案2】:

    作为您当前场景中的一种解决方法,尝试这种方式,我已将放置属性移动到边框而不是底层文本块

    <Grid>
        <Border Visibility="Visible" BorderBrush="Blue" BorderThickness="1" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="28.96" Width="980">
            <TextBlock Visibility="Visible" Foreground="Blue" TextAlignment="Center" FontSize="20" TextWrapping="Wrap"><Run Language="fr-fr" Text="Fiche détails de la capitalisation"/></TextBlock>
        </Border>
        <TextBlock HorizontalAlignment="Left" Margin="10,49.05,0,0" TextWrapping="Wrap" VerticalAlignment="Top"><Run Language="fr-fr" Text="édité le:"/></TextBlock>
        <TextBlock HorizontalAlignment="Left" Margin="390,49.05,0,0" TextWrapping="Wrap" VerticalAlignment="Top"><Run Language="fr-fr" Text="Rafraichissement des données:"/></TextBlock>
    </Grid>
    

    【讨论】:

    • 这是一种不好的做法。那时他最好使用画布
    • @Franck 实际上这个建议是基于 OP 的当前方法,但是即使使用画布,他可能仍然需要设置类似的属性才能将边框正确放置在画布内。所以我觉得值得分享。事实上,我也对另一个答案投了赞成票。
    • 感谢您的回答。我已经尝试过了,它可以工作,但我认为它对边距不是很有效。
    • 网格内的边距不是一个好方法。我理解他围绕您的要求构建的答案,它适用于您,但您应该真正检查使用@Grant 所说的行和列。
    • +1 用于考虑 OP 方法:) 并且仍然设法使其工作。赞!!!
    【解决方案3】:

    您想要实现的是第一行有 1 个文本框,第二行有 2 个文本框。除非你想定义你的网格列和行,否则你将不得不使用 stackpanel 和停靠面板

    以下通过设置网格宽度你控制一切。如果你想在编辑和刷新之间留出空间,你需要改变的是停靠面板上的顶部边距,比如Margin="0,20,0,0",如果你想在细节文本块和边框上留出空间,你应该在边框上放一个Padding以防止内部的任何东西更接近值集。

    <Grid Width="500">
            <StackPanel>
                <Border BorderBrush="Blue" BorderThickness="1">
                    <TextBlock Foreground="Blue" TextAlignment="Center" FontSize="20" TextWrapping="Wrap"><Run Language="fr-fr" Text="Fiche détails de la capitalisation"/></TextBlock>
                </Border>
                <DockPanel LastChildFill="True">
                    <TextBlock TextWrapping="Wrap" VerticalAlignment="Top"><Run Language="fr-fr" Text="édité le:"/></TextBlock>
                    <TextBlock TextWrapping="Wrap" VerticalAlignment="Top" HorizontalAlignment="Right"><Run Language="fr-fr" Text="Rafraichissement des données:"/></TextBlock>
                </DockPanel>
            </StackPanel>
        </Grid>
    

    【讨论】:

    • 感谢您的回答。我会保留这个解决方案,以防画布将来无法使用。问候。
    • 只是为了确保,您可以使用它来帮助您,但仍然强烈建议您在 Grid 和 GridRowDefinition / GridColumnDefinition 上查看一些教程或小帮助文件
    • 我正在做一个小的 windows phone 应用程序,我在它上面使用了 GridRowDefinition 和 GridColumnDefinition,我只是不习惯在 WPF 上这样做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多