2016-01-25 6 views
1

Мне нужно показать горизонтальную полосу прокрутки, когда ширина окна меньше ширины текста в первом столбце.WPF ScrollViewer в столбце сетки

<Window x:Class="Sample.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="300"/> 
     <ColumnDefinition Width="80"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 

    <ScrollViewer Grid.Column="0" > 
     <TextBlock Text="Very looooong text" FontSize="30"/> 
    </ScrollViewer> 

    <Border Grid.Column="1" Background="Red"/> 
    <Border Grid.Column="2" Background="Green"/> 

</Grid> 
</Window> 

Каков наилучший способ сделать это?

--edit Когда пользователь перетаскивает правую границу окна справа налево, мне сначала нужно сузить третий столбец, пока он не исчезнет, ​​тогда мне нужно сузить второй столбец, пока он не исчезнет, ​​а затем, когда ширина окна меньше текста. Мне нужно показать горизонтальную полосу прокрутки.

+1

Чтобы получить горизонтальную полосу прокрутки, вам необходимо установить 'HorizontalScrollBarVisibility =«Авто»VerticalScrollBarVisibility =«Отключено»' на вашем ScrollViewer. – sthotakura

+0

@sthotakura, нет, он не работает – j3094531

+1

Я попробовал в примерном приложении, и он работает.for меня. Возможно, вам понадобится увеличить шрифт до примерно 50, чтобы увидеть эффект? – sthotakura

ответ

0

Вы устанавливаете ширину первого столбца на статическое значение (300), поэтому ширина столбца не изменится при изменении размера окна. Если вы установите динамическое значение, ScrollViewer будет работать так, как вы ожидаете.

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="300*" MaxWidth="300"/> 
     <ColumnDefinition MinWidth="80" MaxWidth="80"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 

    <ScrollViewer Grid.Column="0" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Hidden" > 
     <TextBlock Text="Very looooong text" FontSize="30"/> 
    </ScrollViewer> 

    <Border Grid.Column="1" Background="Red"/> 
    <Border Grid.Column="2" Background="Green"/> 

</Grid> 

PS: Ширина ScrollViewer должна быть меньше, чем TextBlock, и прокрутка будет работать

+0

Итак, это правда, но мне нужно статическое значение ширины в первом столбце, или, по крайней мере, мне нужно начальное значение «x», что означает «не шире, чем« x ». В вашем решении первый столбец растягивается со всем окном. – j3094531

+0

Хорошо, я отредактировал свой ответ: - это желаемое поведение. (также вы можете указать MinWidth) – stratever

+0

Подождите, теперь я вижу, что столбец с текстом становится узким одновременно с третьим столбцом, что не очень хорошо. Когда пользователь перетаскивает правую границу окна справа налево, мне сначала нужно сузить третий столбец, пока он не исчезнет, ​​тогда мне нужно сузить второй столбец, а затем, когда ширина окна меньше текста, мне нужно показать горизонтальная полоса прокрутки – j3094531

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