2016-05-18 3 views
1

Я показываю <ScrollViewer> в своем окне приложения с помощью XAML. На данный момент, я указав размер <ScrollViewer> статический (т.е. придав ему определенное значение, которое не может быть изменено в то время как приложение работает):XAML - как установить размер ScrollViewer динамически?

<Window> 
    <Grid> 
     <TabControl> 
      <TabItem> 
       <StackPanel> 
        <Grid> 
         <ScrollViewer x:Name="scroller" HorizontalAlignment="Right" VerticalScrollBarVisibility="Auto" Margin="39,10,0,0" VerticalAlignment="Top" Height="244" Width="450"> 
          <TextBox x:Name="infoPane" TextWrapping="Wrap" Text="nothing" IsReadOnly="True" /> 
         </ScrollViewer> 
        </Grid> 
       </StackPanel> 
      </TabItem> 
     </TabControl> 
    </Grid> 
</Window> 

То, что я хочу сделать, динамически установить ширину от <ScrollViewer> до половины ширины окна приложения, так что он всегда будет охватывать половину отображаемого содержимого.

Пользователь может изменить размер окна приложения, перетаскивая один из углов или краев окна, поэтому область отображения, которую занимает <ScrollViewer>, должна автоматически составлять половину ширины окна приложения, независимо от того, то есть.

Есть ли способ, которым я могу динамически установить значение <ScrollViewer>Width?

ответ

2

Чтобы получить ширину и высоту текущего окна вызова Window.Current.Bounds.Width/.Height. Просто разделите на две, чтобы получить то, что вы хотите. Установка значения динамически также проста: scroller.Width = value. Вы можете подумать о создании сетки с двумя столбцами с Width="*" и поместите ScrollViewer в один из них, чтобы получить тот же самый эффект, который вы хотите.

EDIT

Вот что я имел в виду во второй части моего ответа:

<Window> 
<Grid> 
    <TabControl> 
     <TabItem> 
      <StackPanel> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 

        </Grid.ColumnDefinitions> 
        <ScrollViewer x:Name="scroller" Grid.Column="0" HorizontalAlignment="Stretch" VerticalScrollBarVisibility="Auto" Margin="39,10,0,0" VerticalAlignment="Top" Height="244" Width="{Binding ActualWidth,RelativeSource={RelativeSource 
          Mode=FindAncestor, AncestorType=Grid}}"> 
         <TextBox x:Name="infoPane" TextWrapping="Wrap" Text="nothing" IsReadOnly="True" /> 
        </ScrollViewer> 
       </Grid> 
      </StackPanel> 
     </TabItem> 
    </TabControl> 
</Grid> 
</Window> 
+0

Где бы я поместил вызов 'Window.Current.Bounds.Width'? В XAML или C#? На данный момент я получаю ошибку компиляции при попытке сделать это в любом ... В XAML, 'Width =" Window .... "' выдаст ошибку, говорящую 'Invalid value for property 'width', а в C#, если я делаю 'MainWindow.', единственными свойствами 'width', которые показаны в автозаполнении, являются:' ActualWidthProperty', который идентифицирует свойство зависимостей и 'WidthProperty', который также идентифицирует свойство зависимостей ... т.е. ни на самом деле вернуть значение для ширины окна. – someone2088

+0

Я опубликовал код, как я имел в виду вторую часть моего ответа, на которую вы должны сосредоточиться! – WPMed

+0

Эй, спасибо за обновление. Сейчас я попробую. Но просто глядя на это и думая об этом, разве это не означает, что я просто делю свое отображение главного окна на два и покажу «» в одном из них ... так что это не имеет значения к фактическому размеру '', он просто меняет размер пространства, где это будет отображаться. т. е. если бы я это сделал и вручную изменил размер моего окна при запуске приложения, размер '' все равно был бы исправлен при любом значении, которое я установил для свойства 'width', не так ли? – someone2088

0

О, мой плохой, я неправильно понял: Можете ли вы дать весь свой XAML?

Динамический путь: width="x*" Где х - число. Но если вы дадите весь XAML, я могу привести пример.

Edit:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="1*" /> 
     <ColumnDefinition Width="1*" /> 
    </Grid.ColumnDefinitions> 

    <ScrollViewer x:Name="scroller" VerticalScrollBarVisibility="Auto"> 
     <TextBox x:Name="infoPane" TextWrapping="Wrap" Text="nothing" IsReadOnly="True" /> 
    </ScrollViewer> 

</Grid> 
+0

Я обновил мой вопрос, чтобы включить полную структуру моего XAML. – someone2088

+0

Ответить отредактировал! –

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