2015-05-07 2 views
-1

Так им пытаются получить мою полосу прокрутки в А появляются только по мере необходимости и B отображаются только вокруг моего текста описанияИмея проблемы с полосой прокрутки в WPF

Сейчас вид прокрутки происходит из верхней части окно в нижней

<Window x:Class="WpfApplication3.DataWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="DataWindow" Height="300" Width="300"> 
<Grid> 
    <Label x:Name="lblTitle" Content="Label" HorizontalAlignment="Left" Margin="96,25,0,0" VerticalAlignment="Top" Width="186"/> 
    <Label x:Name="lblPublishDate" Content="Label" HorizontalAlignment="Left" Margin="96,53,0,0" VerticalAlignment="Top" Width="186"/> 
    <Image x:Name="imgPic" HorizontalAlignment="Left" Height="81" Margin="10,10,0,0" VerticalAlignment="Top" Width="81"/> 
    <ScrollViewer> 
     <TextBlock x:Name="tbDesc" HorizontalAlignment="Left" Margin="10,96,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="167" Width="272" Text="TextBlock" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" /> 
    </ScrollViewer> 

</Grid> 

ответ

0

Вы довольно близко, проблема, как представляется, вопрос о макете. Поскольку элементы управления расположены в сетке без определений строк и столбцов, scrollviewer пытается изменить размер до полного размера сетки, в то время как текстовый блок придерживается фиксированного размера и поля. Попробуйте следующую отправную точку и посмотрите, не поможет ли она:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="150"/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 
    <StackPanel Grid.Row="0"> 
     <Label x:Name="lblTitle" Content="Label" HorizontalAlignment="Left" Width="186"/> 
     <Label x:Name="lblPublishDate" Content="Label" HorizontalAlignment="Left" Width="186"/> 
     <Image x:Name="imgPic" HorizontalAlignment="Left" Height="81" Width="81"/> 
    </StackPanel> 
    <ScrollViewer Grid.Row="1" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto"> 
     <TextBlock x:Name="tbDesc" HorizontalAlignment="Left" TextWrapping="Wrap" Text="TextBlock"/> 
    </ScrollViewer> 
</Grid> 
+0

После небольшого изменения и форматирования вашего ответа я получил именно то, что искал спасибо^_ ^ – Dzm2012

1

Сетка пытается позволить своим детям заняться всем доступным пространством.

Ваш ScrollViewer является одним из детей, поэтому он по умолчанию заполняет все свободное пространство.

Существует несколько способов обойти это.

  • Вы можете использовать другой тип панели, который не пытается растянуть его, чтобы заполнить все свободное пространство. На основе того, что вы делаете с чрезмерно большими полями, может потребоваться Canvas.

    Я предлагаю читать это для быстрого понимания доступных панелей макета WPF в: WPF Layouts - A Visual Quick Start

  • Другой альтернативой является дать сетке некоторые Роу Определения, а также указать, что строка, содержащая ScrollViewer должен быть фиксированного размера , или он должен быть рассчитан таким образом, чтобы он соответствовал любому размеру, который хочет получить дочерний объект (Высота = «Авто»)

  • Или вы могли бы дать ScrollViewer фиксированную высоту и установить его свойство VerticalAlignment, чтобы оно состыковалось либо с верхней, нижней части сетки.

Лично я бы порекомендовал первый вариант - рассмотрел систему компоновки WPF и определил более подходящий тип панели для вашего макета. И если наиболее подходящая панель типа равна a Grid, то я бы настоятельно рекомендовал использовать RowDefinitions и ColumnDefinitions, чтобы дать вашей Grid некоторую структуру, вместо того, чтобы пытаться использовать слишком большие поля для размещения ваших элементов управления.

Смежные вопросы