首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C#编写Xaml文本块

用C#编写Xaml文本块
EN

Stack Overflow用户
提问于 2013-11-11 22:10:43
回答 3查看 2K关注 0票数 1

我正在使用以下代码将Textblock写入Xaml页面:

代码语言:javascript
复制
  Sale.Name = "Price";
  Sale.Text = "$200";
  deatilLayout.Children.Add(Sale);
  Grid.SetRow(Sale, 1);

这会成功地将数据放在xaml页面上,但不是放在正确的位置。

代码语言:javascript
复制
  <FlipView
            x:Name="flipView"
            AutomationProperties.AutomationId="ItemsFlipView"
            AutomationProperties.Name="Item Details"
            TabIndex="1"
            Grid.RowSpan="2"
            ItemsSource="{Binding Source={StaticResource itemsViewSource}}">

            <FlipView.ItemContainerStyle>
                <Style TargetType="FlipViewItem">
                    <Setter Property="Margin" Value="0,137,0,70"/>
                </Style>
            </FlipView.ItemContainerStyle>

            <FlipView.ItemTemplate>
                <DataTemplate>

                    <!--
                        UserControl chosen as the templated item because it supports visual state management
                        Loaded/unloaded events explicitly subscribe to view state updates from the page
                    -->
                    <UserControl Loaded="StartLayoutUpdates" Unloaded="StopLayoutUpdates">
                        <ScrollViewer x:Name="scrollViewer" Style="{StaticResource HorizontalScrollViewerStyle}" Grid.Row="1">

                            <!-- Content is allowed to flow across as many columns as needed -->
                            <common:RichTextColumns x:Name="richTextColumns" Margin="117,0,117,47">
                                <RichTextBlock x:Name="richTextBlock" Width="560" Style="{StaticResource ItemRichTextStyle}" IsTextSelectionEnabled="False">

                                    <Paragraph LineStackingStrategy="MaxHeight" Margin="0,0,0,180">
                                        <InlineUIContainer>
                                            <Image x:Name="image" MaxHeight="480" Margin="0,20,0,100" Stretch="Uniform" Source="{Binding Image}" AutomationProperties.Name="{Binding Title}"/>
                                        </InlineUIContainer>
                                    </Paragraph>
                                    <Paragraph Margin="0,0,0,30" LineHeight="65" FontFamily="Global User Interface">
                                        <Run FontSize="52"  FontWeight="Thin" Text="{Binding Title}" />

                                    </Paragraph>
                                    <Paragraph Margin="0,0,0,50">
                                        <Run Text="TT $" FontSize="24" FontWeight="Thin"/>
                                        <Run FontSize="30" FontWeight="Normal" Text="{Binding Subtitle}"/>


                                    </Paragraph>
                                    <Paragraph x:Name="price" x:FieldModifier="public" />
                                    <Paragraph Margin="0,0,0,40">

                                        <Run FontSize="27" FontWeight="Normal" Text="{Binding Weight}"/>

                                    </Paragraph>
                                    <Paragraph Margin="0,0,0,40" LineHeight="40">

                                        <Run FontSize="35" FontWeight="Normal" Text="{Binding Description}"/>

                                    </Paragraph>
                                    <Paragraph Margin="0,0,0,40" LineHeight="30">

                                        <!--<Run FontSize="22" FontWeight="SemiLight" Text="{Binding Category}"/>-->
                                    </Paragraph>
                                </RichTextBlock>

                                <!-- Additional columns are created from this template -->
                                <common:RichTextColumns.ColumnTemplate>
                                    <DataTemplate>
                                        <RichTextBlockOverflow Width="560" Margin="30,0,0,0">
                                            <RichTextBlockOverflow.RenderTransform>
                                                <TranslateTransform X="-1" Y="4"/>
                                            </RichTextBlockOverflow.RenderTransform>
                                        </RichTextBlockOverflow>
                                    </DataTemplate>
                                </common:RichTextColumns.ColumnTemplate>
                            </common:RichTextColumns>

                            <VisualStateManager.VisualStateGroups>

                                <!-- Visual states reflect the application's view state inside the FlipView -->
                                <VisualStateGroup x:Name="ApplicationViewStates">
                                    <VisualState x:Name="FullScreenLandscape"/>
                                    <VisualState x:Name="Filled"/>

                                    <!-- Respect the narrower 100-pixel margin convention for portrait -->
                                    <VisualState x:Name="FullScreenPortrait">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="richTextColumns" Storyboard.TargetProperty="Margin">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="97,0,87,57"/>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="image" Storyboard.TargetProperty="MaxHeight">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="400"/>
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>

                                    <!-- When snapped, the content is reformatted and scrolls vertically -->
                                    <VisualState x:Name="Snapped">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="richTextColumns" Storyboard.TargetProperty="Margin">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="17,0,17,57"/>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="scrollViewer" Storyboard.TargetProperty="Style">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource VerticalScrollViewerStyle}"/>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="richTextBlock" Storyboard.TargetProperty="Width">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="280"/>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="image" Storyboard.TargetProperty="MaxHeight">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="160"/>
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                        </ScrollViewer>
                    </UserControl>
                </DataTemplate>
            </FlipView.ItemTemplate>
        </FlipView>

我想将数据放在Grid "detailLayout“中的RichTextBlock段落中。

我该怎么做呢?

EN

回答 3

Stack Overflow用户

发布于 2013-11-11 22:56:02

一种方法是,在XAML文件中,将段落元素更改为以下内容:

代码语言:javascript
复制
<Paragraph x:Name="price" />

这使得段落实例作为名为"price“的字段对代码隐藏可见。然后,作为示例,您可以使用以下代码在代码隐藏中访问和设置此段落实例的内容:

代码语言:javascript
复制
string textToSet = "Price: $200"; // Replace this value with whatever value you want to 
                                  // set in the paragraph.
Run textRun = new Run();
textRun.Text = textToSet;    
this.price.Inlines.Add(textRun);

然后,如果要清除段落实例的内容,可以在代码隐藏中执行以下操作:

代码语言:javascript
复制
this.price.Inlines.Clear();

默认情况下,为XAML页中的元素分配名称时,该元素对外部代码是不可见的。如果需要从XAML页面的代码隐藏之外访问'price‘段落元素,则需要将段落元素的声明更改为以下内容:

代码语言:javascript
复制
<Paragraph x:Name="price" x:FieldModifier="public" />

最后要注意的是,如果命名元素在DataTemplate (通常与WPF item控件一起使用)中,则不能访问它们。因此,如果是这种情况,您可能希望使用MVVM方法。

票数 1
EN

Stack Overflow用户

发布于 2013-11-11 22:24:11

为什么不把Grid.Column="“和Grid.Row="”

代码语言:javascript
复制
<Paragraph Grid.Column="0" and Grid.Row="0">
</Paragraph>
票数 0
EN

Stack Overflow用户

发布于 2013-11-11 22:52:42

我建议您使用MVVM并尝试以下操作:

代码语言:javascript
复制
 <RichTextBlock    FontSize="12"    FontFamily="Segoe UI" >
                                <Paragraph >
                                    <Run Text="{Binding Sale.Text}"/> <Run Text="{Binding Sale.Text }"/>
                                </Paragraph>
                            </RichTextBlock>

如果你没有使用MVVM,你将不得不创建一个"Run“对象,插入文本,并将其添加到RichTextBlock的末尾。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19908402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档