简体   繁体   中英

Border around extension of 'Run' element

I'm creating a WPF application which shows a list of styled messages. My goal is to have the contents of multiple styled messages selectable, similar to how you can in Skype:

Skype样本

Currently, I have a ListBox which contains an extension of ListBoxItem that is styled to my needs:

在此处输入图片说明

However, this method does not satisfy my goal of being able to select the text of multiple messages at the same time. It is only possible to select the text inside one message.

I also tried to put my custom elements inside a RichTextBox control within BlockUIContainer s (which is what I suspect I will end up having to use), but the text inside each element cannot be selected, only the entire element:

在此处输入图片说明

Next, I attempted to extend the "Run" element, but I cannot figure out how to put a border around it to style an individual message.

<Run.Style>
    <Style TargetType="{x:Type Run}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Run}">
                    <Border Background="{TemplateBinding Background}" x:Name="Bd" CornerRadius="2">
                        <ContentPresenter />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Run.Style>

With this XAML, I tried to surround the content of the Run using a template, a border element, and a content presenter. However, the Run control does not appear to support templates.

If anybody could point me in the right direction, that would be greatly appreciated.

I don't know if this will help you but is just another idea...

Use one text control with transparent background so you can select all the text at once. Then you have to draw rectangles behind the text blocks. Like an optical ilussion. The challenge here is calculating the exactly size of the text rectangle box and the text allignment. My idea is having a predefined sizes and positions design (left text box, right text box, date, etc) so the size and positioning calculations are easier.

Another idea is play with the mouse and/or selection events. During the user text selection replace it programatically with your own selection. The user will think that is he who is selecting the text but is the application who is doing it. Another illusion...

I hope you could resolve it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM