标签: textblock

如何让 TextBlock 将文本换行到 DockPanel 区域内?

我需要做什么才能让下面的内部 TextBlock 在不定义绝对宽度的情况下换行其文本?

我尝试过 Width=Auto、Stretch、TextWrapping,将其放入 StackPanel 中,似乎没有任何效果。

替代文本
(来源:deviantsart.com

XAML:

<UserControl x:Class="Test5.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:tk="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"
    Width="800"
    Height="600">
    <tk:DockPanel LastChildFill="True">

        <StackPanel tk:DockPanel.Dock="Top"
            Width="Auto"
            Height="50"
            Background="#eee">
            <TextBlock Text="{Binding TopContent}"/>
        </StackPanel>

        <StackPanel tk:DockPanel.Dock="Bottom" Background="#bbb"
            Width="Auto"
            Height="50">
            <TextBlock Text="bottom area"/>
        </StackPanel>

        <StackPanel tk:DockPanel.Dock="Right" Background="#ccc"
            Width="200"
            Height="Auto">
            <TextBlock Text="info panel"/>
        </StackPanel>

        <StackPanel tk:DockPanel.Dock="Left" Background="#ddd"
            Width="Auto"
            Height="Auto">
            <ScrollViewer HorizontalScrollBarVisibility="Auto" Padding="10"
            BorderThickness="0"
                Width="Auto"
                VerticalScrollBarVisibility="Auto">
                <tk:DockPanel HorizontalAlignment="Left" Width="Auto" >
                    <StackPanel tk:DockPanel.Dock="Top" HorizontalAlignment="Left">
                        <Button Content="Add More" Click="Button_Click"/> 
                    </StackPanel>
                    <TextBlock tk:DockPanel.Dock="Top" 
                        Text="{Binding MainContent}" 
                        Width="Auto" 
                        TextWrapping="Wrap" />
                </tk:DockPanel>
            </ScrollViewer>
        </StackPanel> …
Run Code Online (Sandbox Code Playgroud)

silverlight textblock word-wrap dockpanel

5
推荐指数
1
解决办法
6137
查看次数

以编程方式确定文本框中的最大拟合(WP7)

我目前正在为Windows Phone Seven编写电子书阅读器,我正试图像Kindle阅读器那样设计它.为了做到这一点,我需要将我的书分成页面,当添加可变字体大小时,这将变得更加复杂.

为了做到这一点,我只是一次在文本块中添加一个单词,直到它变得高于其容器.但是你可以想象,有一个超过120,000字的文件,这需要一段不可接受的时间.

有没有一种方法可以找出文本何时超出界限(逻辑上将其划分为页面),而不必实际呈现它?这样我就可以在后台线程中运行它,这样用户可以在此期间继续阅读.

到目前为止,我发现的唯一想法是找出文本块如何决定其边界(在度量调用中?),但我不知道如何找到该代码,因为反射器没有显示任何内容.

提前致谢!

silverlight textblock measure windows-phone-7

5
推荐指数
1
解决办法
3920
查看次数

无法在WPF TextBlock中获取垂直滚动条

我在wpf TextBlock控件(.Net 3.5)中呈现文本.文本块的内容取决于用户在列表框中选择的内容.文本换行,所以我不需要水平滚动条.但是,文本通常比窗口显示的数量多,所以我需要一个垂直滚动条.

当我开始搜索时,我很快发现答案是将TextBlock包装在ScrollViewer中.然而,它不起作用(TM),我希望有人可以帮助我找出原因.

这是UI代码的结构:

<Window x:Class=..>
    <StackPanel>
        <ListBox HorizontalAlignment="Stretch"
                 VerticalAlignment="Top"  Height="200"
                 SelectionChanged="listbox_changed" SelectionMode="Single">
        </ListBox>
        <Button Click="Select_clicked">Select</Button>
        <ScrollViewer VerticalScrollBarVisibility="Auto">
            <TextBlock Name="textblock" TextWrapping="Wrap"/>
        </ScrollViewer>
    </StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

当用户选择列表框中的项目时,与该项目关联的某些文本将显示在TextBlock中.我原以为代码应该是所有必需的代码,但它从来没有为我提供滚动条.

搜索和试验给了我两条线索:问题的根源可能与我动态更新TextBlock的内容有关,而TextBlock不会根据新内容调整自身大小.我找到了一个似乎相关的帖子,通过将TextBlock的高度设置为其ActualHeight(在更改其内容之后),它会起作用.但它没有(我看不出这个效果).

其次,如果我设置ScrollViewer的高度(在设计时间内),那么我会得到一个垂直滚动条.例如,如果我在上面的xaml中将它设置为300,结果几乎是好的,因为第一次打开的窗口包含一个带有垂直滚动条的TextBlock(当且仅当我需要它时).但是如果我让窗口变大(在运行时使用鼠标调整窗口大小),ScrollViewer不会利用新的窗口大小,而是根据xaml保持其高度,这当然不会.

希望,我只是忽略了一些明显的东西......

谢谢!

wpf scrollbars textblock

5
推荐指数
1
解决办法
1万
查看次数

如何在WPF应用程序中设置TextBlock和Label的默认颜色,字体系列和字体大小?

编辑:我想这个问题没有说清楚.它实际上由4个独立的组成:

  1. TextBlock如果客户端应用程序不以编程方式或通过xaml提供任何样式,如何获取其默认颜色?
  2. 如何Label获得其默认颜色?
  3. TextBlock如果客户端应用程序不以编程方式或通过xaml提供任何样式,如何获取其默认字体大小和字体系列?
  4. 如何Label获得其默认字体大小和字体系列?

顺便说一下,问题不在于如何更改或定义a TextBlock或a 的颜色/字体大小/字体系列的样式Label,尽管它们在某种程度上是相关的.我想我已经知道了#2的答案,这是LabelSystemColors.ControlTextBrushKey得到它的颜色,并通过覆盖ConrolTextBrushKey如下:

<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Red"/>
Run Code Online (Sandbox Code Playgroud)

你可以"全局"改变Labels的颜色.经过一番研究,我想我也找到了#1的答案是:TextBlock继承从含有其它的前景色Window,在默认情况下得到的Foreground,从颜色SystemColors.WindowTextBrushKey.通过为WindowTextBrush定义颜色,如下所示:

<Window.Resources>
    <SolidColorBrush x:Key="{x:Static SystemColors.WindowTextBrushKey}" 
                     Color="Yellow"/>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)

您可以更改TextBlock内部s 的"前景"颜色Window.

问题#3和#4对我来说仍然是难题,但我假设它们与SystemFonts有关.

希望这是有道理的.我真的很想知道答案,因为他们一直在困扰我.非常感谢!

以下是原帖:


如果您查看LabelWindows附带的主题中的a样式(例如"aero.normalcolor.xaml"),您可以找到

<Setter Property="Foreground" 
        Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
Run Code Online (Sandbox Code Playgroud)

哪个设置了颜色Label.但是FontSize在样式中没有指定属性的位置,我认为这与SystemFonts有关.对于a TextBlock,它看起来更神秘,因为它在"aero.normalcolor.xaml"中的样式只有4行:

<Style x:Key="{x:Type TextBlock}"
                 TargetType="{x:Type TextBlock}">
        <Setter …
Run Code Online (Sandbox Code Playgroud)

windows wpf label themes textblock

5
推荐指数
2
解决办法
2万
查看次数

WPF TextBlock 在文本换行后获取行

我有FixedDocument页面,我想TextBlock放在它上面,但它可能Textblock不适合页面的高度。
所以我想从繁重的产生线TextBlockTextWrapping,然后创建新的TextBlock,即通过安装高度,并把它页。
TextBlockLineCount私有财产,这意味着它TextLines在包装后有,我可以以某种方式得到它。使用运行
创建TextBlock

public TextItem(PageType pageType, Run[] runs, Typeface typeFace, double fontSize)
        : base(pageType)
{
     this.TextBlock = new TextBlock();
     this.TextBlock.Inlines.AddRange(runs);
     if (typeFace != null)
          this.TextBlock.FontFamily = typeFace.FontFamily;

     if (fontSize > 0)
           this.TextBlock.FontSize = fontSize;
     this.TextBlock.TextWrapping = TextWrapping.Wrap;   //wrapping
}
Run Code Online (Sandbox Code Playgroud)

TextBlock用文本创建:

public TextItem(PageType pageType, String text, Typeface typeFace, double fontSize)
        : base(pageType)
{
    if (typeFace == null || fontSize == …
Run Code Online (Sandbox Code Playgroud)

wpf textblock fixeddocument line-count

5
推荐指数
1
解决办法
1908
查看次数

在 XAML 中设置今天的日期

我想在 XAML 中显示今天的日期,然后将其返回到我的视图模型。所以这在 XAML 中显示

<TextBlock Text="{Binding Source={x:Static sys:DateTime.Now}, StringFormat=dd/MMM/yyyy}"/>
Run Code Online (Sandbox Code Playgroud)

但我想在 ModifiedDate 中返回它,所以我这样做了

<TextBlock x:Name="ModifiedDate" Text="{Binding Source={x:Static sys:DateTime.Now}, StringFormat=dd/MMM/yyyy}"/>
Run Code Online (Sandbox Code Playgroud)

这不起作用。我不想使用日期选择器。我想使用 Pure XAML 并且不想去编码。有任何想法吗?

xaml date textblock

5
推荐指数
1
解决办法
6940
查看次数

WPF样式设置器中的多个运行元素

是否有可能在XAML定义多Run一个内部的Style制定者?

以下两个已Run定义并失败:

物业'价值'不止一次设定.

<TextBlock>
    <TextBlock.Style>
         <Style TargetType="{x:Type TextBlock}">
              <Setter Property="Text">
                   <Setter.Value>
                       <Run Text="{Binding SelectedItem.iso}"/>
                       <Run Text="{Binding SelectedItem.value}"/>
                  </Setter.Value>
              </Setter>
             <Style.Triggers>
                 <DataTrigger Binding="{Binding SelectedItem.type}" Value={x:Null}">
                      <Setter Property="Text" Value="No value" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

这可以修复,同时保留多个的使用Run

wpf styles textblock

5
推荐指数
1
解决办法
2186
查看次数

如何获取TextBlock的文本(TextBlock是Button的内容)

aTextBlock在 aButton里面content

我想要Text的财产TextBlock。请告知我如何解决这个问题。

下面的代码仅返回ctSystem.Windows.Controls.TextBlock

string ct = (sender as Button).Content.ToString();
Run Code Online (Sandbox Code Playgroud)

当然,这Content确实ButtonTextBlock System.Windows.Controls.TextBlock
我在 stackoverflow 中发现的非常相似的案例,但人们只提供了错误的答案。

c# wpf button textblock

5
推荐指数
1
解决办法
4959
查看次数

WPF C# - 从 TextBlock 获取内联格式化粗体文本

我正在向a 中的元素添加一些TextBlock元素。我正在通过添加.BorderStackPanelTextBlockInlines

单击时,我想获取TextBlock.Here 是我的代码的格式化文本。

public void addText()
{
    TextBlock myText = new TextBlock();
    myText.Inlines.Add(new Bold(new Run("Hello ")));
    myText.Inlines.Add("World!");

    Border myBorder = new Border();
    myBorder.Child = myText;
    myBorder.MouseDown += new MouseButtonEventHandler(Border_Clicked);

    myStackPanel.Children.Add(myBorder);
}

private void Border_Clicked(object sender, MouseButtonEventArgs e)
{
    //Border senderBox = (Border)sender;
    //TextBlock senderText = (TextBlock)senderBox.Child;
    //Bold inline = (Bold) senderText.Inlines.ElementAt(0);
    // How to Output "Hello "?
}
Run Code Online (Sandbox Code Playgroud)

Border_Clicked应该输出“你好”。正如您所看到的,我可以访问粗体文本,但如何输出它?

c# wpf textblock visual-studio

5
推荐指数
1
解决办法
2574
查看次数

XAML TextBlock TextAlignment 与 Horizo​​ntalAlignment

考虑以下 XAML:

<Grid>
    <TextBlock Text="Some Text" TextAlignment="Right" />
    <TextBlock Text="Some Text" HorizontalAlignment="Right" />
</Grid>
Run Code Online (Sandbox Code Playgroud)

只要两个TextBlocks 设置为相同的Grid.RowGrid.Column,它们将始终出现在相同的位置 - 一个在另一个之上。

类似的概念,这里 - 两个 s 中的两行文本StackPanel完全对齐:

<Grid>
    <StackPanel>
        <TextBlock Text="Line One" HorizontalAlignment="Right" />
        <TextBlock Text="Line Two" TextAlignment="Right" />
    </StackPanel>
    <StackPanel>
        <TextBlock Text="Line One" HorizontalAlignment="Right" />
        <TextBlock Text="Line Two" TextAlignment="Right" />
    </StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)

等等...


就在父级右侧显示文本而言,TextAlignmentHorizontalAlignment属性都在做同样的事情 - 从我所看到的。

TextAlignment有人能告诉我 s和sHorizontalAlignment之间的实际区别是什么吗TextBlock

两者有优先选择吗?

使用这两者有什么影响吗?

xaml textblock alignment text-alignment

5
推荐指数
1
解决办法
4137
查看次数