XAML-如何动态设置ScrollViewer的大小?

时间:2016-05-18 13:16:24

标签: c# wpf xaml dynamic

我正在使用XAML在我的应用程序窗口中显示<ScrollViewer>。目前,我正在静态指定<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 个答案:

答案 0 :(得分:2)

获取当前窗口调用Window.Current.Bounds.Width / .Height的宽度和高度。只需两分即可得到你想要的东西。动态设置值也很简单:scroller.Width = value。您可以考虑使用Width="*"创建一个包含2列的网格,并将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>

答案 1 :(得分: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>