Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调整scrollviewer';s宽度动态变化_C#_Wpf_Scrollviewer - Fatal编程技术网

C# 调整scrollviewer';s宽度动态变化

C# 调整scrollviewer';s宽度动态变化,c#,wpf,scrollviewer,C#,Wpf,Scrollviewer,我正在创建一个UI,它的核心组件是一个scrollviewer,它持有一个带有可变项目数的stackpanel。如果屏幕上没有足够的空间,左侧和右侧的按钮将显示,以允许使用scrollviewer单击stackpanel。请注意,这些项目的大小都相同 <Grid.ColumnDefinitions> <ColumnDefinition x:Name="LeftButton" Width="Auto"/> <ColumnDefinition x:Name=

我正在创建一个UI,它的核心组件是一个scrollviewer,它持有一个带有可变项目数的stackpanel。如果屏幕上没有足够的空间,左侧和右侧的按钮将显示,以允许使用scrollviewer单击stackpanel。请注意,这些项目的大小都相同

<Grid.ColumnDefinitions>
   <ColumnDefinition x:Name="LeftButton" Width="Auto"/>
   <ColumnDefinition x:Name="Content" Width="*"/>
   <ColumnDefinition x:Name="RightButton" Width="Auto"/>
</Grid.ColumnDefinitions>

这很好用。但是,我现在只需要显示完整/完整的项目。因此,如果stackpanel中的项目比我在屏幕上显示的项目多,我不希望出现右侧或左侧的部分项目。我只想我的滚动按钮出现,表明有更多的项目可用。 因此,如果在stackpanel中添加了一个子项,则持有stackpanel的scrollviewer应该查看屏幕上是否有足够的空间来显示所有项目。如果没有,则应减小其宽度,以便隐藏下一个(部分可见)项目

我的问题是:确定stackpanel中的所有项目是否可以显示在屏幕上的最佳方法是什么。如果没有,如何实现隐藏可能显示的部分项目

我根据SizeChanged事件对Scrollviewer本身的宽度进行了调整,但我不确定这是否是实现此行为的最明智方法。是否最好在初始化时确定scrollviewer的MaxWidth,相应地设置它并让它增长

提前感谢,,
好奇

我认为,既然这是一个定制的滚动查看器,那么您根本不需要使用默认的滚动查看器,而是使用您自己的基于stackpanel的控件来显示项目。您甚至可以实现一个动画,这样当按下左或右按钮时,它可以以一种很好的方式滚动。

一个使实现此目标更加复杂的问题是,一旦设置了scrollviewer,您就无法更改其宽度。如果我试着把它展示出来,它根本不会被展示出来。这确实值得一想。也许我干脆放弃了滚动视图。我确实喜欢动画的想法。然而,目前看来,我们可能必须在项目上绘制一些东西,这些东西不会包含在项目中,而是绘制在屏幕上项目所在的位置上。我不确定在项目和在其上绘制的附加层之间同步动画的可能性有多大。