为什么我的TreeViewItem文本不包含在我的示例代码中?如何包装?

时间:2018-05-08 18:58:38

标签: wpf treeview width scrollviewer treeviewitem

为什么我的TreeViewItem不会包含在我的示例代码中?

enter image description here

的Xaml:

using System;
using System.Collections.Generic;

namespace WpfAppTestScrollViewBehavior
{
    public class MainWindowModel
    {
        public List<Level1> Level1s { get; } = new List<Level1>();

        public MainWindowModel()
        {
            Level1s.Add(new Level1());
        }
    }
}


using System;
using System.Drawing.Text;

namespace WpfAppTestScrollViewBehavior
{
    public class Level1
    {
        public bool IsSelected { get; set; }
        public string Name { get; set; } = "a very long name in order to test text wrapping functionnality";

        public InstalledFontCollection InstalledFontCollection { get; } = new InstalledFontCollection();
    }
}

代码:

<TabItem Header="Test 2">
    <ScrollViewer HorizontalScrollBarVisibility="Disabled">
        <Grid HorizontalAlignment="Stretch" Background="LightPink">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <CheckBox Grid.Column="0"></CheckBox>
            <TextBlock Grid.Column="1" Text="long name just for testing" 
                        TextWrapping="Wrap" Margin="5,0,0,0"></TextBlock>
        </Grid>
    </ScrollViewer>
</TabItem>

只是为了防止快速错误答案:

您可以添加此代码,它可以正常工作:

  render() {
    const users = [
      'tom': {
        phone: '123',
        email: 'hotmail'
      },
      'rob': {
        phone: '321',
        email: 'yahoo'
      },
      'bob': {
        phone: '333',
        email: 'gmail'
      },
    ];

    const list = users.map((user) =>
      (<User
        name={user}
        phone={users.phone}
        email={users.email}
      />),
    );

    return <ul>{list}</ul>;
  }

以前工作代码的结果(就像我期望的那样):

enter image description here

2 个答案:

答案 0 :(得分:0)

ColumnDefinition默认为*,因此第1列中的TextBlock将占用所有可用空间。

尝试使用MaxWidth进行试验:<ColumnDefinition Width="Auto" MaxWidth="100"/>

修改

如果您不想使用预定义的WidthMaxWidth,请将Width的{​​{1}}绑定到Grid ActualWidth像这样:

TabControl

我刚刚测试了这种方法并将<Grid Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabControl}}, Path=ActualWidth}" /> 包裹好并在我调整窗口大小时重新包装它......如果TextBlock的文本没有相对于右窗口边框的边距当以这种方式设置宽度时,您可以通过将TextBlock的右边距设置为10或更大来修复它,具体取决于所需的填充...

答案 1 :(得分:0)

由于您尚未指定Width,因此可向Width提供<Textblock>

  

为什么我的TreeViewItem不会包含在我的示例代码中?

文字正在被包裹,但由于宽度不受限制,可见包裹

例如:

XAML:宽度:150个单位TextWrapping =&#34; NoWrap&#34;

<TextBlock Grid.Column="1" Text="{Binding Path=Name}"   Width="150" Name="textblock1"
                                        TextWrapping="NoWrap" Margin="10,0,0,0"></TextBlock>

<强>输出: enter image description here

XAML:宽度:150个单位TextWrapping =&#34; Wrap&#34;

<TextBlock Grid.Column="1" Text="{Binding Path=Name}"   Width="150" Name="textblock1"
                                        TextWrapping="Wrap" Margin="10,0,0,0"></TextBlock>

<Grid HorizontalAlignment="Stretch" Width="150" Background="LightGreen">
     public string Name { get; set; } = ;

enter image description here