简体   繁体   English

Windows Phone 7中文本块中文本的格式设置

[英]Formatting of text in a textblock in windows phone 7

I am have a text which is has bold, underline and italic html characters. 我有一个带有粗体,下划线和斜体html字符的文本。 For example 例如

<b> hello<b> how are <i>you</i>. I am <u>fine</u>

I have to show it in formatted form in a textblock on WP7. 我必须在WP7的文本块中以格式化的形式显示它。 I have a listbox like this 我有一个像这样的列表框

<ListBox x:Name="LBayaDetail" Loaded="LBayaDetail_Loaded" Margin="6,0,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <ListBox.ItemContainerStyle>
                    <Style TargetType="ListBoxItem">
                        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                    </Style>
                </ListBox.ItemContainerStyle>
                <ListBox.ItemTemplate>
                        <DataTemplate>
                        <Grid x:Name="ayaContent" Margin="0,6,0,0" Hold="ayaContent_Hold" Tap="ayaContent_Tap" Loaded="ayaContent_Loaded" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="6"/>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="80" />
                                <ColumnDefinition Width="6" />
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <Grid Background="#FFC5AC88" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                                <TextBlock x:Name="ayaIndex" Text="{Binding aya}" FontSize="36" Margin="0" FontWeight="Bold" HorizontalAlignment="Center" />
                                <StackPanel VerticalAlignment="Bottom"  HorizontalAlignment="Center">
                                <Image Source="{Binding BookmarkImage}" HorizontalAlignment="Center" Width="48" Height="48" Margin="0,0,0,12" />
                                    <Image Source="{Binding NoteImage}" HorizontalAlignment="Center" Width="48" Height="48" Margin="0,0,0,12" />
                                    <Image Source="{Binding TagImage}" HorizontalAlignment="Center" Width="48" Height="48" Margin="0,0,0,12" />
                                </StackPanel>
                            </Grid>
                            <Grid Grid.Row="1" Background="#FFC5AC88" x:Name="Media" Tap="Media_Tap" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                                <Image Source="/Images/Media-Play(1).png" Width="30" Height="30" HorizontalAlignment="Center" Margin="12,0,0,0" VerticalAlignment="Top" />
                            </Grid>
                            <!--ini pak dimana tempat untuk ayat dan translasi-->
                            <Grid  Grid.Column="2" Background="#FFAC9574" Margin="6,0,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                                <TextBlock x:Name="aya" TextWrapping="Wrap" Text="{Binding text}" HorizontalAlignment="Right" FontFamily="/Fonts/me_quran2.ttf#me_quran2" FontSize="{Binding FontSizeAya}" Foreground="Black" Margin="24,0,12,-12" TextAlignment="Right" Visibility="{Binding visibility1}" />
                            </Grid>
                            <Grid Grid.Column="2" Grid.Row="1" Margin="6,0,0,0" Background="#FFAC9574" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                                <StackPanel>

                                    <TextBlock Visibility="{Binding visibility2}" x:Name="translation" Text="{Binding translation}" TextWrapping="Wrap" HorizontalAlignment="Right" FontFamily="/Fonts/ARIALUNI.TTF#Arial Unicode MS" FontSize="{Binding FontSizeTranslation}" Foreground="#FF5D2A07" Margin="12,6,6,0" />
                                    <TextBlock Visibility="{Binding visibility3}" x:Name="translation2" Text="{Binding translation2}" TextWrapping="Wrap" HorizontalAlignment="Right" FontFamily="/Fonts/ARIALUNI.TTF#Arial Unicode MS" FontSize="{Binding FontSizeTranslation}" Foreground="DarkGreen" Margin="12,20,6,0" />
                                </StackPanel>
                            </Grid>
                            <!-- -->
                        </Grid>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

I fetch from database like 我从数据库中获取

App.Listxyz = (Application.Current as App).db.SelectList<Aya>(strSelect);

And assign it to Listbox like this 像这样分配给列表框

LBayaDetail.ItemsSource = App.ListAyaBySurah;

And shows the text as it is and do not format it which is obvious. 并按原样显示文本,并且不格式化它,这是显而易见的。 I searched for it and I was able to format individual textblock by using "RUN" but I am unable to do it in listbox. 我进行了搜索,并且可以使用“ RUN”设置单个文本块的格式,但无法在列表框中进行格式化。 I also tried to use HTMLTextBlock but it also doesn't format the text and shows it like this 我也尝试使用HTMLTextBlock,但是它也没有设置文本格式并像这样显示它

Hi
How 
Are 
You

Any help will be much appreciated that how do I format a textblock with different text decorations. 我将如何格式化具有不同文字装饰的文本块,将对您的帮助大有帮助。

Thanks 谢谢

You should place a grid and a stackpanel inside the listbox. 您应该在列表框内放置一个网格和一个堆栈面板。 Something like the following 类似于以下内容

                <Grid>          
                    <StackPanel Grid.Column="1">
                        <TextBlock Padding="0,5,0,2" TextWrapping="Wrap">
                            <Run Text="{Binding test}" FontWeight="Bold" /> <Run Text="{Binding test2}" />
                            <LineBreak/>
                            <Run Text="{Binding test3}" />
                        </TextBlock>
                    </StackPanel>
                </Grid>

One way to do that is: 一种方法是:

public class FormattedText
{
    public string Text { get; set; }
    public bool IsBold { get; set; }
    public bool IsItalic { get; set; }
    public bool IsUnderlined { get; set; }
}

Have a method that converts the HTML you stored in your db to a list of the class you have above 有一种方法可以将您存储在数据库中的HTML转换为上面具有的类的列表

example: From this: 示例:从此:

<b> hello<b> how are <i>you</i>. I am <u>fine</u>

to this: 对此:

  1. First element: 第一个要素:
    • Text = "hello" 文字=“你好”
    • IsBold = true IsBold = true
    • skip what not needed since bool default value is false 跳过不需要的内容,因为bool的默认值为false
  2. Second element 第二要素
    • Text =" how are" 文字=“怎么样”
    • skip what not needed since bool default value is false 跳过不需要的内容,因为bool的默认值为false
  3. Third item 第三项
    • Text ="you" 文字=“ you”
    • IsItalic=true; IsItalic = true;
    • skip what not needed since bool default value is false and so on.... 跳过不需要的内容,因为bool的默认值为false等等。

and then have another method that from that list creates a list of Runs to be added to your TextBlock or maybe create a custom TextBlock witch take the List<FormattedText> from DataContext and process it by adding the Run elements to self 然后从该列表中创建另一个方法,以创建要添加到TextBlock的运行列表,或者创建自定义TextBlock巫婆,从DataContext获取List<FormattedText>并通过将Run元素添加到self中进行处理

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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