簡體   English   中英

Windows Phone 7中文本塊中文本的格式設置

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

我有一個帶有粗體,下划線和斜體html字符的文本。 例如

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

我必須在WP7的文本塊中以格式化的形式顯示它。 我有一個像這樣的列表框

<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>

我從數據庫中獲取

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

像這樣分配給列表框

LBayaDetail.ItemsSource = App.ListAyaBySurah;

並按原樣顯示文本,並且不格式化它,這是顯而易見的。 我進行了搜索,並且可以使用“ RUN”設置單個文本塊的格式,但無法在列表框中進行格式化。 我也嘗試使用HTMLTextBlock,但是它也沒有設置文本格式並像這樣顯示它

Hi
How 
Are 
You

我將如何格式化具有不同文字裝飾的文本塊,將對您的幫助大有幫助。

謝謝

您應該在列表框內放置一個網格和一個堆棧面板。 類似於以下內容

                <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>

一種方法是:

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

有一種方法可以將您存儲在數據庫中的HTML轉換為上面具有的類的列表

示例:從此:

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

對此:

  1. 第一個要素:
    • 文字=“你好”
    • IsBold = true
    • 跳過不需要的內容,因為bool的默認值為false
  2. 第二要素
    • 文字=“怎么樣”
    • 跳過不需要的內容,因為bool的默認值為false
  3. 第三項
    • 文字=“ you”
    • IsItalic = true;
    • 跳過不需要的內容,因為bool的默認值為false等等。

然后從該列表中創建另一個方法,以創建要添加到TextBlock的運行列表,或者創建自定義TextBlock巫婆,從DataContext獲取List<FormattedText>並通過將Run元素添加到self中進行處理

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM