首页 新闻 会员 周边 捐助

wpf如何在textblock右下角显示一个标记

0
悬赏园豆:5 [已解决问题] 解决于 2019-06-08 09:29

比如上面这张图,右下角是一个红色的三角,感谢

wpf
问题补充:

现在使用的笨办法,把textblock和图片放在grid同一个单元格内

                                    <Grid>
                                        <TextBlock Text="{Binding csny}"></TextBlock>
                                        <Image HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="8" Height="8" Source="images/error.png" Visibility="{Binding da_cssj_7, Converter={StaticResource ErrorConverter}}"></Image>
                                    </Grid>

但是用了这种办法,页面加载和渲染速度好像慢了很多,还有其它更好的办法吗?

duxer的主页 duxer | 初学一级 | 园豆:8
提问于:2019-05-10 22:08
< >
分享
最佳答案
0

到目前为止,没有更好的办法

duxer | 初学一级 |园豆:8 | 2019-06-08 09:29
其他回答(6)
0

编辑模板,在模板里添加

诶碧司 | 园豆:1912 (小虾三级) | 2019-05-11 15:23
0

<TextBlock Text="1002.57" TextAlignment="Center" FontSize="40">
<Path Stroke="Red" StrokeThickness="1" Fill="Red">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="10,0">
<PolyLineSegment Points="10,0 10,10 0,10 10,0"></PolyLineSegment>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</TextBlock>

左眼水星 | 园豆:123 (初学一级) | 2019-05-12 18:36

这种方法我试了一下,不能设置Text值,如果设置了,就不会显示三角形

支持(0) 反对(0) duxer | 园豆:8 (初学一级) | 2019-05-13 12:37

@duxer: 这个例子就设置了Text值啊,你的TextBlock的宽高是自动大小的吗,固定大小的就可能显示不出来。

支持(0) 反对(0) 左眼水星 | 园豆:123 (初学一级) | 2019-05-13 18:25

@左眼水星: TextBlock的大小是自动的

支持(0) 反对(0) duxer | 园豆:8 (初学一级) | 2019-05-15 12:59
0

直接编辑textblock的样式比较方便,还可以复用

会长 | 园豆:12463 (专家六级) | 2019-05-13 09:16
0

1.重写(模版),找出现有元素补充。
2.直接background,贴一个三角形搞定。

上述(模版代码都可以)
3.再建组合

eg.

public class TextBoxForWatermark : TextBoxEx
{
    public virtual Brush DefaltBrush { get; set; }
    public virtual VisualBrush WatermarkBrush { get; set; } = new VisualBrush(new IconBox() { Foreground = ThemeDefine.Default.Primary0.ToColorBrush(), IconVal = 0XF004 }) { AlignmentX = AlignmentX.Left, AlignmentY = AlignmentY.Top, Stretch = Stretch.None };

    public override void OnApplyTemplate()
    {
        DefaltBrush = Background;
        base.OnApplyTemplate();
        Background = (!string.IsNullOrEmpty(Text) && Text.Length > 0) ? DefaltBrush : WatermarkBrush;
    }

    protected override void OnTextChanged(TextChangedEventArgs e)
    {
        base.OnTextChanged(e);
        Background = (!string.IsNullOrEmpty(Text) && Text.Length > 0) ? DefaltBrush : WatermarkBrush;
    }
}
/// <summary>
/// TextBoxExtWm.xaml 的交互逻辑
/// </summary>
public partial class TextBoxEx
{
    public TextBoxEx()
    {
        InitializeComponent();
        MaxLength = 200;
    }
    private int _radiusEx = 5;
    public int RadiusEx
    {
        get { return _radiusEx; }
        set
        {
            _radiusEx = value;
            Radius = new CornerRadius(value);
        }
    }

    public CornerRadius Radius
    {
        get => _border?.CornerRadius ?? new CornerRadius(0);
        set { if (_border != null) _border.CornerRadius = value; }
    }

    protected Border _border;
    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        _border = GetTemplateChild("border").ToType<Border>();
        RadiusEx = RadiusEx;
    }
}
花飘水流兮 | 园豆:13617 (专家六级) | 2019-05-13 23:25

是个懒人,所以除非必要 坚决不用 依赖属性。简单类型属性,xmal都是认的。

支持(0) 反对(0) 花飘水流兮 | 园豆:13617 (专家六级) | 2019-05-13 23:27
0

<TextBox Width="100" Height="50">
<TextBox.Template>
<ControlTemplate>
<StackPanel Orientation="Vertical">
<TextBlock Width="100" Height="40" Background="Red"> </TextBlock>
<Image Source="/Image/退出.png" HorizontalAlignment="Right" Height="10" Width="10"></Image>
</StackPanel>
</ControlTemplate>
</TextBox.Template>
</TextBox>

吧图片换成一个三角形的图片就行了,大小这些都可以自己定义

收获园豆:5
请假一天 | 园豆:25 (初学一级) | 2019-05-14 11:01

这种方法图片会占用单元格的空间,文字在排版的时候不好控制,比如上下居中时,是把图片的高度减去后再居中

支持(0) 反对(0) duxer | 园豆:8 (初学一级) | 2019-05-15 13:01
0

使用CheckBox或者Button,然后重写模板,在模板里面画上角标。

HotSky | 园豆:223 (菜鸟二级) | 2019-08-02 14:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册