2

我有一个自定义控件,它有一个字符串描述依赖属性,如下所示:

<CustomControl>
    <CustomControl.Description>
        Hello World
    </CustomControl.Description>
</CustomControl>

这个描述绑定在TextBlock的几个地方,如下图:

<Button>
    <Button.ToolTip>
        <TextBlock Text="{Binding Path=Description}"/>
    </Button.ToolTip>
    <TextBlock Text="{Binding Path=Description}"/>
</Button>

如何向文本块添加新行和粗体格式?我努力了:

  1. 添加\r\n到描述中,但未提及。
  2. &#x0a;或添加&#x0d;&#x0a;到描述中,但未提取。
  3. 添加<![CDATA[<LineBreak/>]]>到描述中,但未提及。
  4. 将描述的类型更改为标签并使用 ContentPresenter 控件绑定到标签,但我发现一次只有一个 ContentPresenter 可以绑定到标签,而另一个不断消失。
  5. 将描述的类型更改为 FlowDocument,但我发现无法添加多个查看器控件来查看同一个文档。
4

3 回答 3

1

您可以将Description类型从简单更改string为 a,object从而允许容器将其设置为所需的任何内容,例如富文本、图像等。

同一个框架元素不能是两个元素的逻辑子元素,因此不能同时用作按钮和工具提示的内容。

例子:

<CustomControl>
    <CustomControl.Description>
        <WrapPanel>
            <TextBlock Text="Hello " Foreground="Red"/>
            <TextBlock Text="World!" Foreground="Blue"/>
        </WrapPanel>
    </CustomControl.Description>
</CustomControl>

模板:

<Button>
    <Button.ToolTip>
        <ContentPresenter Content="{TemplateBinding SomeOtherProperty}"/>
    </Button.ToolTip>
    <ContentPresenter Content="{TemplateBinding Description}"/>
</Button>
于 2010-01-08T10:38:36.777 回答
0

The type of Description should be DataTemplate:

    <DataTemplate>
        <TextBlock>
                <Run>Hello</Run>
                <LineBreak/>
                <Run>World</Run>
        </TextBlock>
    </DataTemplate>

You can then use labels and assign the template to each label.

<Label FontSize="24" ContentTemplate="{Binding Inlines}"/>
<Label FontSize="10" ContentTemplate="{Binding Inlines}"/>
于 2010-01-08T11:42:49.230 回答
0

如果您的ToolTip文本(例如)在设计时不是您可以知道的,但必须在运行时在代码隐藏中构建,那么您可以这样做:

TextBlock tb = new TextBlock();
tb.Inlines.Add(new Run("Background indicates packet repeat status:"));
tb.Inlines.Add(new LineBreak());
tb.Inlines.Add(new LineBreak());
Run r = new Run("White");
r.Background = Brushes.White;
tb.Inlines.Add(r);
tb.Inlines.Add(new Run("\t= Identical Packet received at this time."));
tb.Inlines.Add(new LineBreak());
r = new Run("SkyBlue");
r.Background = new SolidColorBrush(Colors.SkyBlue);
tb.Inlines.Add(r);
tb.Inlines.Add(new Run("\t= Original Packet received at this time."));

ToolTip tt = new ToolTip();
tt.Content = tb;
myButton.ToolTip = tt;

这个例子给出了一个格式很好的 4 行工具提示文本,带有颜色突出显示。

我没有使用的唯一原因Brushes.SkyBlue是为了证明你可以构建任何你想要的颜色。例如,new SolidColorBrush(Color.FromArgb(128, 86, 180, 233));对于半透明的 SkyBlue 背景。

选择颜色时,请记住您的色盲用户:色盲调色板

于 2015-04-08T22:51:59.630 回答