C# 如何为文本块中的文本创建边框?

C# 如何为文本块中的文本创建边框?,c#,xaml,uwp,windows-10-universal,C#,Xaml,Uwp,Windows 10 Universal,我想为TextBlock中的文本创建边框 我试过投阴影,但遇到了问题。问题出在你身上。我已经报告了这个问题 因此,我需要一种替代方法来为TextBlock中的文本创建边框 作为参考,我希望文本如下所示: 此外,请在此处查看此链接,它提供了您所需的一切,甚至更多: 由于DropShadowPanel出现问题,我想您希望文本有阴影,而不是边框 如果是这种情况,您可以执行以下操作: <TextBlock Text="My text" Foreground="Black" RenderTran

我想为TextBlock中的文本创建边框

我试过投阴影,但遇到了问题。问题出在你身上。我已经报告了这个问题

因此,我需要一种替代方法来为TextBlock中的文本创建边框

作为参考,我希望文本如下所示:


此外,请在此处查看此链接,它提供了您所需的一切,甚至更多:


由于DropShadowPanel出现问题,我想您希望文本有阴影,而不是边框

如果是这种情况,您可以执行以下操作:

<TextBlock Text="My text" Foreground="Black" RenderTransformOrigin="0.5,0.5"  >
    <TextBlock.RenderTransform>
        <CompositeTransform TranslateX="1" TranslateY="1"/>
    </TextBlock.RenderTransform>
</TextBlock>
<TextBlock Text="My text"  Foreground="White" />
结果与您的示例非常相似:


你甚至不需要网格来放置它们。只需将TextBlock放在边界控件中:

<Border BorderBrush="Black" BorderThickness="2">
    <TextBlock Text="TextBlock" FontSize="12" Foreground="Black" />
</Border>


注意:需要Windows周年更新(10.0.14393.0)来正确支持此效果


UWPCommunityToolkit将通过更新修复此问题,但我们可以通过为DropShadowPanel添加“HorizontalAlignment=“Left”手动修复此问题

使用



TextBlock没有OpacityMask属性。@VijayNirmal只有Opacity怎么办?我不懂你的代码。它会像轮廓一样为整个网格创建边框,但它是如何为TextBlock创建边框的。TextBlock中的边框是什么意思?您是否尝试过将TextBlock放在边框内?或者你的意思不同?因为你对DropShadowPanel有问题,我猜你想要文本的阴影,而不是边框。@Romasz作为参考,我想要文本。现在你的问题更清楚了。这能回答你的问题吗?这行不通。它将在TextBlock周围放置一个边框,但我想在TextBloxk中显示文本。您的问题描述令人困惑。如果是这样的话,你应该试试Iuri的建议。作为参考,我想要像文本一样的。我想要边框,而不是阴影效果。我想在白色背景上显示白色文本。您能提供一个预期结果的示例吗?图像会很好。UWPCommunityToolkit将通过更新为DropShadowPanel解决此问题,但我们可以通过为DropShadowPanel添加“HorizontalAlignment=“Left”手动解决此问题。所以我们可以很容易地达到这个效果。
<Grid x:Name="grid" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <!--TextBlock that will receive the shadow-->
    <TextBlock FontSize="46" Text="My text"  Foreground="White" x:Name="shadowTextBlock" />
    <!--Let this TextBlock foreground black just for design time-->
    <TextBlock FontSize="46" Text="My text"  Foreground="Black" x:Name="foregroundTextBlock"/>
</Grid>
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    // Set the right color to the foreground text
    this.foregroundTextBlock.Foreground = this.shadowTextBlock.Foreground;

    var compositor = ElementCompositionPreview.GetElementVisual(this.grid).Compositor;
    var spriteVisual = compositor.CreateSpriteVisual();
    spriteVisual.Size = this.grid.RenderSize.ToVector2();

    var dropShadow = compositor.CreateDropShadow();
    dropShadow.Mask = this.shadowTextBlock.GetAlphaMask();
    dropShadow.Color = Colors.Black;
    dropShadow.Offset = new Vector3(0, 0, -50);
    spriteVisual.Shadow = dropShadow;

    ElementCompositionPreview.SetElementChildVisual(this.shadowTextBlock, spriteVisual);
}
<Border BorderBrush="Black" BorderThickness="2">
    <TextBlock Text="TextBlock" FontSize="12" Foreground="Black" />
</Border>
<controls:DropShadowPanel BlurRadius="3" ShadowOpacity="1" OffsetX="0" OffsetY="0" Color="Black">
    <TextBlock FontSize="42" Text="Vijay Nirmal" Foreground="White"/>
</controls:DropShadowPanel>