C# XAML-如何动态设置ScrollViewer的大小?
我正在使用XAML在我的应用程序窗口中显示一个C# XAML-如何动态设置ScrollViewer的大小?,c#,wpf,xaml,dynamic,C#,Wpf,Xaml,Dynamic,我正在使用XAML在我的应用程序窗口中显示一个。目前,我正在静态地指定的大小(即给它一个设置值,在应用程序运行时不能更改): 我想做的是动态地将的宽度设置为应用程序窗口宽度的一半,以便它始终覆盖显示内容的一半 用户可以通过拖动窗口的一个角或边缘来重新调整应用程序窗口的大小,因此占据的显示区域应自动始终为应用程序窗口宽度的一半,不管是什么 有没有一种方法可以动态设置宽度属性的值?哦,糟糕,我误解了:你能给你整个XAML吗 动态方式是: width=“x*” 其中x是一个数字。 但是如果你给出整
。目前,我正在静态地指定
的大小(即给它一个设置值,在应用程序运行时不能更改):
我想做的是动态地将
的宽度设置为应用程序窗口宽度的一半,以便它始终覆盖显示内容的一半
用户可以通过拖动窗口的一个角或边缘来重新调整应用程序窗口的大小,因此
占据的显示区域应自动始终为应用程序窗口宽度的一半,不管是什么
有没有一种方法可以动态设置
宽度属性的值?哦,糟糕,我误解了:你能给你整个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>
要获取当前窗口的宽度和高度,请调用window.current.Bounds.width
/.height
。只要除以二就可以得到你想要的。动态设置值也很容易:scroller.Width=value
。您可以考虑创建一个包含2个列的网格,它们既有<代码>宽度=“*”< /代码>,并将ScReVIEW置于其中之一,以获得您想要的完全相同的效果。
编辑
以下是我在回答的第二部分的意思:
<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>
我已经更新了我的问题,以包括我的XAML的完整结构。我应该在哪里调用Window.Current.Bounds.Width
?在XAML或C#中?目前,当我试图在以下两种情况下进行编译时,都会出现编译错误。。。在XAML中,Width=“Window…”
将给出一个错误,表示属性“Width”的值无效,而在C#中,如果我这样做,
main窗口中,自动完成中显示的唯一“Width”属性是:
ActualWidthProperty,它标识一个依赖属性,以及
WidthProperty`,它还标识了一个依赖项属性。。。i、 e.两者都没有实际返回窗口宽度的值。我发布了代码,说明我的答案的第二部分是什么意思,您应该关注它!嘿,谢谢你的更新-我现在就试试。但是只要看看它,想想它-这不意味着我将把我的主窗口显示分成两个,并在其中一个窗口中显示
。。。所以它并没有改变
的实际大小,只是改变了显示空间的大小。i、 e.如果我这样做了,并且在应用程序运行时手动调整了窗口的大小,
的大小仍然会固定在我将其宽度属性设置为的任何值上,不是吗?如果将ScrollViewer的水平对齐设置为拉伸,它将始终填充它所拥有的空间。因此,在这种情况下,它总是占据屏幕的一半。是的-只要试一下,它就完全按照我的想法做了。。。我的主窗口现在分为两列,
以我在width
属性中指定的大小显示在左侧,并且无论我将主窗口调整为什么大小,都保持该大小。。。但是谢谢你的建议。
<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>