我是WPF的新手,我遇到了一个似乎有点难以解决的问题.基本上我想要一个可扩展但保持正方形(或任何其他任意)宽高比的4x4网格.这实际上看起来相当棘手,这让我感到惊讶,因为我认为这是一个相当普遍的要求.
我从这样的网格定义开始:
<Grid>
<Grid.RowDefinitions>
<Grid.RowDefinition Height="*"/>
<Grid.RowDefinition Height="*"/>
<Grid.RowDefinition Height="*"/>
<Grid.RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<Grid.ColumnDefinition Width="*"/>
<Grid.ColumnDefinition Width="*"/>
<Grid.ColumnDefinition Width="*"/>
<Grid.ColumnDefinition Width="*"/>
</Grid.ColumnDefinition>
...
</Grid>
Run Code Online (Sandbox Code Playgroud)
现在,如果将其设置为拉伸,则可以填充窗口或放入其中的任何容器.行和列是均匀的,但纵横比不固定.
然后我尝试将它放在StackPanel中以使用可用空间.没有帮助.当我记得Viewboxes的时候,最让我感到震惊的是什么.
<StackPanel Orientation="Horizontal">
<Viewbox>
<Grid Height="1000" Width="1000"> <!-- this locks aspect ratio -->
<Grid.RowDefinitions>
<Grid.RowDefinition Height="*"/>
<Grid.RowDefinition Height="*"/>
<Grid.RowDefinition Height="*"/>
<Grid.RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<Grid.ColumnDefinition Width="*"/>
<Grid.ColumnDefinition Width="*"/>
<Grid.ColumnDefinition Width="*"/>
<Grid.ColumnDefinition Width="*"/>
</Grid.ColumnDefinition>
...
</Grid>
</viewbox>
<Label HorizontalAlignment="Stretch">Extra Space</Label>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
现在我的内容会缩放并保持宽高比.问题是,如果窗口不够宽,我的某些网格会离开屏幕.如果是这样的话,我希望能够滚动到它.同样,我可能需要最小尺寸,这也可能导致垂直滚动.
现在我尝试将StackPanel和Grid(单独)放在适当的ScrollViewer容器中,但随后内容不再缩放以适应窗口.它达到了全尺寸,这是不好的.
那我该怎么做呢?我吠叫错了树吗?有更好/更简单的方法吗?
我不希望我的窗口"仅水平"或"仅垂直"调整大小.我可以在我的窗口上设置一个可以强制执行此操作的属性,还是有一个可以使用的漂亮的代码隐藏技巧?
我想制作一个全屏WPF应用程序,在具有不同屏幕分辨率的所有机器上看起来相同.我用800*480像素重新创建了我的MainWindow.xaml.我在窗口顶部做了一个菜单,如下所示:
<Grid Height="480" Width="800">
<Menu FontSize="25" Margin="0,0,0,442" >
<MenuItem Header="File" />
</Menu>
</Grid>
Run Code Online (Sandbox Code Playgroud)
但是当我在调试模式下启动应用程序时,菜单位于屏幕的中央.我想这是因为我的屏幕重建是1366*768像素.那么我应该怎么做才能使我的程序在完全screnn模式下的不同重新设置上看起来相同?
更新:我希望它像Photoshop一样.Photoshop在不同的resoultions上看起来几乎相同.图片:http : //i.stack.imgur.com/W1SL6.png http://i.stack.imgur.com/7KYxX.png
更新:我只是想知道这些值应该是什么使程序像我想要的那样工作:窗口高度,窗口宽度,网格高度,网格宽度,
对不起布鲁斯,我是这样的初学者: