WPF:在ScrollViewer中获取AccessText以进行换行

时间:2011-01-04 16:55:03

标签: wpf user-interface xaml text scrollviewer

我的Grid包含ScrollViewer,其中包含AccessText。我希望AccessText占据ScrollViewer的整个宽度,它应该占据Grid的整个宽度,而不会有任何溢出。目前,我的AccessText的内容被截断在屏幕的右侧而不是包装。我已尝试将AccessText.TextWrapping设置为WrapWrapWithOverflow,我也尝试完全删除该属性。我转而使用Grid而不是StackPanel,因为我认为这可能会影响内容的大小,但这并没有帮助。这就是我所拥有的:

<Grid MaxHeight="40">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="Whee a label:" Grid.Column="0"/>
    <ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto"
                  HorizontalScrollBarVisibility="Auto">
        <AccessText Text="{Binding MyLongTextField}"/>
    </ScrollViewer>
</Grid>

3 个答案:

答案 0 :(得分:1)

当您将ColumnDefinition Width设置为Auto时,其中的ScrollViewer将不受Column的“可见宽度”限制,因此它仍将占用所需的水平空间。使用您发布的xaml,我认为Width="*"将满足您的需求。对于ScrollViewer,似乎你不希望它能够滚动到水平但只有Verticaly?在这种情况下,请设置HorizontalScrollBarVisibility="Disabled"。否则你将得到一个水平滚动条。

<Grid MaxHeight="40">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="Whee a label:" Grid.Column="0"/>
    <ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto"
                  HorizontalScrollBarVisibility="Disabled">
        <AccessText TextWrapping="Wrap" Text="{Binding MyLongTextField}"/>
    </ScrollViewer>
</Grid>

答案 1 :(得分:0)

如果您只是想让AccessText无限期换行,请将您的第二个ColumnDefinitionAuto修改为*,并将AccessText移到ScrollViewer之外1}}如下所示...

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
             <TextBlock Text="Whee a label:" Grid.Column="0"/>
             <AccessText Grid.Column="1" TextWrapping="Wrap" Text="{Binding MyLongTextField}"/>
    </Grid>

文本无法换行的原因是因为第二个ColumnDefinition设置为Auto;这基本上不会强制AccessText周围的界限。

如果你想保持ScrollViewer试试这个......

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="40"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="Whee a label:" Grid.Column="0"/>
    <ScrollViewer Grid.Column="1" VerticalScrollBarVisibility="Auto">
        <AccessText  TextWrapping="Wrap" Text="{Binding MyLongTextField}"/>
    </ScrollViewer>
</Grid>

答案 2 :(得分:0)

这最终给了我想要的东西:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="Whee a label:" Grid.Column="0"/>
    <ScrollViewer Grid.Column="1" MaxHeight="40"
                  HorizontalScrollBarVisibility="Disabled"
                  VerticalScrollBarVisibility="Auto">
        <AccessText Text="{Binding CRData.Error}" TextWrapping="Wrap"/>
    </ScrollViewer>
</Grid>

感谢MeleakAaron建议使用*作为列宽而不是Auto,并感谢Meleak建议使用Disabled水平滚动条而不是Auto