我无法将 WPF 控件(在此示例中我将使用 Grid
控件)调整为 Window 的
。我意识到 Client
区域的大小Grid
默认情况下会自动填充所有可用空间,但是我需要手动设置 Grid
的 Width
以便我可以从另一个控件(一个 DataGrid,其中一个列的 Width
设置为 Star
,如果它有任何区别的话)绑定(bind)到它。
请考虑以下 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>
以及以下代码隐藏:
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
的宽度略大于 Window
的 Client
区域,导致水平滚动条
正在显示。如果 SystemParameters.BorderWidth
没有准确计算出 Window
边框的宽度,那是什么?
根据最新的 MSDN 文档,SystemParameters.BorderWidth
:获取确定非最小化窗口的非客户区边框宽度的指标。
最佳答案
这是一种无需代码隐藏即可绑定(bind)客户端宽度大小的方法:
<ScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Auto">
<Grid x:Name="testGrid" Background="DarkGray" Width="{Binding Content.ActualWidth, ElementName=mainWindow}">
</Grid>
</ScrollViewer>
这使用您指定的顶级 Window
并获取其内容的实际宽度,在本例中为 ScrollViewer
。如果出于某种原因您希望窗口的内容与窗口的大小不同,您可以将其包含在一个空的 Grid
中,这样该技术仍然有效。
关于c# - 调整内容大小以填充窗口的 `Client Area`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6515406/