Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.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# WPF-包装中的截止问题_C#_Wpf_Xaml_Mvvm - Fatal编程技术网

C# WPF-包装中的截止问题

C# WPF-包装中的截止问题,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,当我在“包裹”面板中使用多个控件时,如果任何控件包含长文本(大于窗口大小),则会发生截断。(见图) 我有两个文本块和一个按钮控件 <Grid> <WrapPanel> <TextBlock Text="Very long Text Message contains long text for testing " FontWeight="Bold"></TextBlock> <

当我在“包裹”面板中使用多个控件时,如果任何控件包含长文本(大于窗口大小),则会发生截断。(见图)

我有两个文本块和一个按钮控件

  <Grid>
        <WrapPanel>
            <TextBlock Text="Very long Text Message contains long text for testing " FontWeight="Bold"></TextBlock>
            <Button Content="sample Text"></Button>
            <TextBlock Text="sample Text  textblock"></TextBlock>

        </WrapPanel>
    </Grid>

第一个文本块将被截断。如果文本包含更多字符,我希望换行到下一行


帮我解决这个问题。提前感谢。

您需要文本框中的属性
TextWrapping=“Wrap”

<TextBlock 
   Text="Very long Text Message contains long text for testing " 
   FontWeight="Bold"   
   TextWrapping="Wrap">
</TextBlock>

你是想把一个段落包装起来吗?如果是这样,那么
WrapPanel
实际上并不是您想要的

WrapPanel
获取UI元素(不动产的矩形块)并将它们从左到右、从上到下排列。您可以在第一个
TextBlock
中启用换行,但这样会占用两行高的矩形屏幕空间。因为
TextBlock
填充了整个矩形,所以按钮实际上会出现在它的下方,而不是粗体字“for testing”的右侧

如果你想让整个事情像一个段落一样流动,你不想使用UI元素(它们总是矩形块);您希望使用文本元素(在段落中流动)

将文本元素放入XAML的方法是将它们包装在
TextBlock
中。试试这个:

<Grid>
    <TextBlock TextWrapping="Wrap">
        <Bold>
            <Run Text="Very long Text Message contains long text for testing " />
        </Bold>
        <Button Content="sample Text"></Button>
        sample Text  textblock
    </TextBlock>
</Grid>

示例文本文本块
请注意,我将第一个文本块包装在
元素中,否则后面的空格将被忽略(假定为XAML文档中的空白)。第二段文本没有前导空格或尾随空格,所以我直接将其内联


对XAML的“控件”和“文本”方面的差异有更多的了解。

当按钮包含长文本时,发生断点。如果您希望所有的内容都以段落的形式流动,则应该真正考虑使用A而不是<代码>按钮< /代码>。超链接是文本元素,将像文本一样换行;按钮(作为UI元素,因此是不动产的矩形块)将无法优雅地包装。如果你真的想要一个按钮,试着将
文本
更改为
文本
,看看你是否喜欢结果,但这将是你用
按钮
能做的最好的了。谢谢@joe。但问题是我必须在ItemsControl中添加超链接。当我尝试添加它时,会显示错误,如**无法将类型为“Hyperlink”的值添加到类型为“UIElementCollection”的集合或词典中***
items控件来自WPF的“UI元素”端,并且希望包含UI元素<代码>超链接
来自WPF的“文本元素”端。要在
ItemsControl
中使用文本元素,需要将它们包装在
TextBlock
中(这是一个UI元素,但知道如何包含文本元素——它是WPF的UI元素和文本元素之间的适配器)。我答案底部的链接有更多的细节。当按钮包含长文本时,会发生中断。