我无法调整WPF控件(我将在此示例中使用Grid
控件)的大小调整为Client
的{{1}}区域的大小。我意识到Window
默认会自动填充所有可用空间,但是我需要手动设置Grid
Grid
,以便我可以从另一个控件绑定它(如果DataGrid的列之一Width
设置为Width
,则会将其设置为Star
。
请考虑以下XAML:
<Window x:Class="TestApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="768" Width="1024"
x:Name="mainWindow">
<ScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Auto">
<Grid x:Name="testGrid" Background="DarkGray">
</Grid>
</ScrollViewer>
</Window>
以下Code-Behind:
using System.Windows;
namespace TestApplication
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
testGrid.Width = mainWindow.Width - (SystemParameters.BorderWidth * 2);
}
}
}
运行此简单应用程序时,Grid
的宽度略大于Client
的{{1}}区域,导致显示Window
。如果Horizontal Scroll Bar
无法准确计算SystemParameters.BorderWidth
边框的宽度,那该怎么办?
根据最新的MSDN文档,Window
:获取用于确定非最小化窗口的非客户区域边框宽度的指标。
答案 0 :(得分:5)
这是绑定客户端宽度大小而没有代码隐藏的一种方法:
<ScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Auto">
<Grid x:Name="testGrid" Background="DarkGray" Width="{Binding Content.ActualWidth, ElementName=mainWindow}">
</Grid>
</ScrollViewer>
这会使用您指定的顶级Window
并获取其内容的实际宽度,在这种情况下为ScrollViewer
。如果由于某种原因你想要窗口的内容与窗口的大小不同,你可以将它括在一个空的Grid
中,这样这种技术仍然有效。
答案 1 :(得分:1)
在与这个尺寸问题争吵了很长一段时间之后,我终于找到了解决问题的优雅方案。虽然我已经选择@Rick Sladkey的回答作为答案(并回答我的问题),但我想我可能会发布我的最新理解,希望它可以帮助其他人。
事实证明,真正的挫折点在于处理ScrollViewer
。在我ActualWidth
ScrollViewer
的{{1}}调整内容时,如果VerticalScrollBar
看不清ActualWidth
,我的内容会在我的内容增长到垂直滚动状态时开始崩溃高度。虽然我曾期望ScrollViewer
上的绑定能够调整我的控件的大小以适应ActualHeight
的可视区域,但实际上它仍保持相同的宽度并且也可以水平滚动。
事实证明,修复实际上非常简单。将控件的高度或宽度绑定到ActualWidth
或ScrollViewer
的{{1}}。
答案 2 :(得分:-1)
不是手动设置宽度,而是如何绑定到网格的ActualWidth
属性(这将为您提供实际值)