c# - 调整内容大小以填充窗口的 `Client Area`

标签 c# wpf xaml wpf-controls

我无法将 WPF 控件(在此示例中我将使用 Grid 控件)调整为 Window 的 Client 区域的大小。我意识到 Grid 默认情况下会自动填充所有可用空间,但是我需要手动设置 GridWidth 以便我可以从另一个控件(一个 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 的宽度略大于 WindowClient 区域,导致水平滚动条 正在显示。如果 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/

相关文章:

c# - 使用 EditorTemplate 时出现 id & name 错误

c# - 有没有办法在单个应用程序中为一个 WCF 调用指定 TLS 1.0,为另一个 WCF 或 WebClient 调用指定 TLS 1.2?

C#跨线程通信

c# - BitmapSource.Create 错误 - 缓冲区大小不够大

wpf - 如何在单击项目时展开 WPF TreeView

c# - 正确地在页面之间传递数据

xaml - ListBox Windows 10 通用 header

wpf - 表达混合初学者

c# - MarshalAs 嵌套结构

c# - WPF 如何创建可以使用静态列和行标题滚动的网格