Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TextBlock Text wrapp Wrap和NoWrap通过DynamicResource组合和文本_C#_Wpf_Xaml_Word Wrap_Dynamicresource - Fatal编程技术网

C# TextBlock Text wrapp Wrap和NoWrap通过DynamicResource组合和文本

C# TextBlock Text wrapp Wrap和NoWrap通过DynamicResource组合和文本,c#,wpf,xaml,word-wrap,dynamicresource,C#,Wpf,Xaml,Word Wrap,Dynamicresource,我有多个文本块,其文本通过DynamicSource插入。它们都设置为text wrapping=“Wrap”。但在这些文本字符串中,我有不允许拆分的单词。这些话必须作为一个整体来保留 使用Xaml中的硬编码文本,通过TextBlock中的TextBlock很容易解决: <TextBlock TextWrapping="Wrap"> Example text with wrap and <TextBlock TextWrapping="NoWrap" Text=" exampl

我有多个文本块,其文本通过DynamicSource插入。它们都设置为text wrapping=“Wrap”。但在这些文本字符串中,我有不允许拆分的单词。这些话必须作为一个整体来保留

使用Xaml中的硬编码文本,通过TextBlock中的TextBlock很容易解决:

<TextBlock TextWrapping="Wrap">
Example text with wrap and <TextBlock TextWrapping="NoWrap" Text=" example text without wrap"/
</TextBlock>

在动态文本中使用带换行和的示例文本。例如:

<TextBlock TextWrapping="Wrap">
        Example text with wrap and example text&#160;without&#160;wrap
</TextBlock>

您是否考虑过使用“
WrapWithOverflow
”而不是“
Wrap
”? 这仅在出现空格时才会打断该行

然后,您可以设置必须与破折号一起出现的单词,例如- “常规行和不应中断的单词”

您应该使用Run:

<TextBlock>
    <Run Text={x:static SomeText} />
    <Run Text={x:static SomeNoWrapText}
         TextWrapping="NoWrap"/>
    <Run Text={x:static SomeMoreText} />
</TextBlock>

评论有点过分,但也不是一个完整的答案

让我们将您的示例XAML从所有隐式内容转换为完全限定的结构

使用隐式内容属性等简化的XAML:

<TextBlock TextWrapping="Wrap" Foreground="green">
    bla1 bla2 bla3 bla4 <TextBlock TextWrapping="NoWrap" Text="Together(en)"/> bla5 bla6 longWordWhichShouldBreak
</TextBlock>

bla1bla2bla3bla4bla5bla6bla6longwordwhichshouldbreak
等效实际结构:

<TextBlock TextWrapping="Wrap" Foreground="green">
    <TextBlock.Inlines>
        <Run Text="bla1 bla2 bla3 bla4 "/>
        <InlineUIContainer>
            <InlineUIContainer.Child>
                <TextBlock TextWrapping="NoWrap" Text="Together(en)"/>
            </InlineUIContainer.Child>
        </InlineUIContainer>
        <Run Text=" bla5 bla6 longWordWhichShouldBreak"/>
    </TextBlock.Inlines>
</TextBlock>

这会让您对XAML中的内容的复杂性有一些了解。您不能通过简单地设置
Text
属性来归档相同的结果

目前我无法回答如何解决这个问题,因为
DynamicResource
没有足够的信息开始转换为上述结构


您可能想看看这个问题:

谢谢。没有休息空间将是一个很好的解决方案。不幸的是,它不起作用:这就是
TextWrapping=“Wrap”
的工作方式。即使你使用了一个长单词,它也会打断它,以便在可用空间中进行包装。使用
TextWrapping=“WrapWithOverflow”
,其结果类似于在
TextBlock
中使用
TextBlock
(即问题中的示例)。使用run与在TextBlock中使用TextBlock具有相同的效果。它直接在XAML代码中工作,但在通过dynamic ressource插入时不工作。谢谢!是的,我也试过WrapWithOverflow。此设置的问题是文本部分突出,因此不可见(被截断)。听起来您所谓的“DynamicSource”的结构不适合在WPF中使用。如何对一系列文本块进行预处理,其中每个文本块都有其显示选项?是的,在nowrap和wrap片段中对多个文本序列进行预处理是一种解决方案。但是它相对来说比较昂贵。我认为在wrap textblock中只保留一个单词是一个更好的解决方案。通常,使用
textblock.Inlines
属性可能比使用
textblock.Text
属性运气更好。你不能指望
Text
属性除了把你的文本当作。。。好的,谢谢你的内联提示!但是内联线是不可绑定的,我认为不能注入动态资源。嗯,令人惊讶。。。但关键是,当您编写
时,您使用的是
文本
,但当您编写
X
时,使用的是
TextBlock.Inlines
集合,而不是
Text
属性。因此,不要希望在不使用内联线的情况下模仿您编写的XAML。
<TextBlock TextWrapping="Wrap" Foreground="green">
    bla1 bla2 bla3 bla4 <TextBlock TextWrapping="NoWrap" Text="Together(en)"/> bla5 bla6 longWordWhichShouldBreak
</TextBlock>
<TextBlock TextWrapping="Wrap" Foreground="green">
    <TextBlock.Inlines>
        <Run Text="bla1 bla2 bla3 bla4 "/>
        <InlineUIContainer>
            <InlineUIContainer.Child>
                <TextBlock TextWrapping="NoWrap" Text="Together(en)"/>
            </InlineUIContainer.Child>
        </InlineUIContainer>
        <Run Text=" bla5 bla6 longWordWhichShouldBreak"/>
    </TextBlock.Inlines>
</TextBlock>