2016-05-18 75 views
1

我在使用XAML的应用程序窗口中显示<ScrollViewer>。目前,我指定<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的宽度和高度。只需除以二来得到你想要的。动态设置值也很容易:​​。你可以考虑创建一个带有两列的Grid,两列都带有Width="*",并将ScrollViewer放置在其中一个中以获得你想要的完全相同的效果。

编辑

下面是我在回答第二部分的意思是:

<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中执行时,出现编译错误......在“宽度=”窗口....“将出现一个错误,提示”属性宽度值无效“,并且在C#中,如果我执行'MainWindow.',则自动完成中显示的唯一'width'属性是:'ActualWidthProperty',它标识一个依赖属性,'WidthProperty',它也标识一个依赖属性...即,既不实际上返回窗口宽度的值。 – someone2088

+0

我发布了我的意思是我的答案的第二部分,你应该关注的代码! – WPMed

+0

嘿,感谢您的更新 - 我现在就试一试。但只是看看并思考它 - 并不意味着我将我的主窗口显示分为两个,并在其中一个显示“”......所以它没有区别到“”的实际大小,它只是改变显示空间的大小。即如果我这样做了,并且在应用程序运行时手动调整了我的窗口大小,那么'ScrollViewer>的大小仍然会固定为我设置其'width'属性的值,不是吗? – someone2088

0

哦,我的坏,我误解了:你可以给你的整个XAML?

动态的方式是: width="x*" 其中x是一个数字。 但是,如果你给整个XAML,我可以做一个例子。

编辑:

<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

编辑答案! –

相关问题