控件不适合窗体大小调整 WPF
Controls do not fit to form resizing WPF
我正在尝试创建一个响应式应用程序,但我所做的所有努力都没有在新标准 WPF 上产生结果。
当表单缩小或展开时,我会确保调整应用程序控件的大小。
正如您从图片中看到的那样,当表单缩小时,项目 3 并不完全可见,因此不适合用户给出的新尺寸。
如何创建一个可以自动调整控件的应用程序?在正常情况下,我这样做没有问题,但在 WPF 中并不真正理解如何自动适应,尽管阅读了大量教程。谢谢。
代码:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="SpanCore.MainWindow"
Title="SpanCore" Height="522" Width="783" MinWidth="400" MinHeight="522">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition />
<RowDefinition />SpanCoreSpanCore
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3">
<Menu Height="21" VerticalAlignment="Top" HorizontalContentAlignment="Stretch" Background="#FFF0EDED" Grid.ColumnSpan="3">
<MenuItem ToolTip="File" Header="File">
</MenuItem>
</Menu>
<DataGrid HorizontalContentAlignment="Stretch" VerticalAlignment="Top" Grid.ColumnSpan="3" Margin="10,26,10,0" Grid.RowSpan="2">
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="h" CanUserResize="False" MinWidth="100" Width="150"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="a" CanUserResize="False" MinWidth="100" Width="150"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
<TabControl Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" Width="auto" Height="auto">
<TabItem Header="tab1">
<Canvas>
<DockPanel>
<GroupBox Header="item1" Grid.Row="2" Grid.Column="0" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Height="168" Width="300">
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="S"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="P"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="V"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="P"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="Pa"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="G"/>
</DataGrid.Columns>
</DataGrid>
</GroupBox>
<GroupBox Header="item2" Canvas.Left="303" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Height="168" >
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="Book" MinWidth="80"/>
</DataGrid.Columns>
</DataGrid>
</GroupBox>
<DockPanel DockPanel.Dock="Right" HorizontalAlignment="Right">
<GroupBox Header="item3" Canvas.Left="903" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Width="202" Height="168" DockPanel.Dock="Right" >
<Grid>
<RadioButton Content="1t" HorizontalAlignment="left" DockPanel.Dock="left"/>
<RadioButton Content="2t" HorizontalAlignment="Right" DockPanel.Dock="Right"/>
</Grid>
</GroupBox>
</DockPanel>
</DockPanel>
</Canvas>
</TabItem>
<TabItem Header="tab2">
</TabItem>
</TabControl>
</Grid>
图像示例:
尝试以下代码:
<Window x:Class="WPFDevelopement.SampleWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="SampleWindow" Height="300" Width="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition />
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3">
<Menu Height="21" VerticalAlignment="Top" HorizontalContentAlignment="Stretch" Background="#FFF0EDED" Grid.ColumnSpan="3">
<MenuItem ToolTip="File" Header="File">
</MenuItem>
</Menu>
<DataGrid HorizontalContentAlignment="Stretch" VerticalAlignment="Top" Grid.ColumnSpan="3" Margin="10,26,10,0" Grid.RowSpan="2">
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="h" CanUserResize="False" MinWidth="100" Width="150"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="a" CanUserResize="False" MinWidth="100" Width="150"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
<TabControl Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" Width="auto" Height="auto">
<TabItem Header="tab1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<GroupBox Grid.Column="0" Header="item1" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" MinWidth="300">
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="S"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="P"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="V"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="P"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="Pa"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="G"/>
</DataGrid.Columns>
</DataGrid>
</GroupBox>
<GroupBox Grid.Column="1" Header="item2" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="Book" MinWidth="80" />
</DataGrid.Columns>
</DataGrid>
</GroupBox>
<GroupBox Grid.Column="2" Header="item3" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" >
<StackPanel Orientation="Horizontal">
<RadioButton Content="1t" />
<RadioButton Content="2t" Margin="8,0" />
</StackPanel>
</GroupBox>
</Grid>
</TabItem>
<TabItem Header="tab2">
</TabItem>
</TabControl>
</Grid>
</Window>
结果:
对所有 WPF 程序员的最后评论:不要使用 Canvas
并避免硬编码 Width
、Height
和其他此类属性。将 Grid 与 proprotional 或 Auto 列一起使用。
我正在尝试创建一个响应式应用程序,但我所做的所有努力都没有在新标准 WPF 上产生结果。 当表单缩小或展开时,我会确保调整应用程序控件的大小。 正如您从图片中看到的那样,当表单缩小时,项目 3 并不完全可见,因此不适合用户给出的新尺寸。 如何创建一个可以自动调整控件的应用程序?在正常情况下,我这样做没有问题,但在 WPF 中并不真正理解如何自动适应,尽管阅读了大量教程。谢谢。
代码:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="SpanCore.MainWindow"
Title="SpanCore" Height="522" Width="783" MinWidth="400" MinHeight="522">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition />
<RowDefinition />SpanCoreSpanCore
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3">
<Menu Height="21" VerticalAlignment="Top" HorizontalContentAlignment="Stretch" Background="#FFF0EDED" Grid.ColumnSpan="3">
<MenuItem ToolTip="File" Header="File">
</MenuItem>
</Menu>
<DataGrid HorizontalContentAlignment="Stretch" VerticalAlignment="Top" Grid.ColumnSpan="3" Margin="10,26,10,0" Grid.RowSpan="2">
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="h" CanUserResize="False" MinWidth="100" Width="150"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="a" CanUserResize="False" MinWidth="100" Width="150"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
<TabControl Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" Width="auto" Height="auto">
<TabItem Header="tab1">
<Canvas>
<DockPanel>
<GroupBox Header="item1" Grid.Row="2" Grid.Column="0" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Height="168" Width="300">
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="S"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="P"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="V"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="P"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="Pa"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="G"/>
</DataGrid.Columns>
</DataGrid>
</GroupBox>
<GroupBox Header="item2" Canvas.Left="303" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Height="168" >
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="Book" MinWidth="80"/>
</DataGrid.Columns>
</DataGrid>
</GroupBox>
<DockPanel DockPanel.Dock="Right" HorizontalAlignment="Right">
<GroupBox Header="item3" Canvas.Left="903" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Width="202" Height="168" DockPanel.Dock="Right" >
<Grid>
<RadioButton Content="1t" HorizontalAlignment="left" DockPanel.Dock="left"/>
<RadioButton Content="2t" HorizontalAlignment="Right" DockPanel.Dock="Right"/>
</Grid>
</GroupBox>
</DockPanel>
</DockPanel>
</Canvas>
</TabItem>
<TabItem Header="tab2">
</TabItem>
</TabControl>
</Grid>
图像示例:
尝试以下代码:
<Window x:Class="WPFDevelopement.SampleWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="SampleWindow" Height="300" Width="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition />
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3">
<Menu Height="21" VerticalAlignment="Top" HorizontalContentAlignment="Stretch" Background="#FFF0EDED" Grid.ColumnSpan="3">
<MenuItem ToolTip="File" Header="File">
</MenuItem>
</Menu>
<DataGrid HorizontalContentAlignment="Stretch" VerticalAlignment="Top" Grid.ColumnSpan="3" Margin="10,26,10,0" Grid.RowSpan="2">
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="h" CanUserResize="False" MinWidth="100" Width="150"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="a" CanUserResize="False" MinWidth="100" Width="150"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
<TabControl Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" Width="auto" Height="auto">
<TabItem Header="tab1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<GroupBox Grid.Column="0" Header="item1" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" MinWidth="300">
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="S"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="P"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="V"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="P"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="Pa"/>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="G"/>
</DataGrid.Columns>
</DataGrid>
</GroupBox>
<GroupBox Grid.Column="1" Header="item2" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="Book" MinWidth="80" />
</DataGrid.Columns>
</DataGrid>
</GroupBox>
<GroupBox Grid.Column="2" Header="item3" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" >
<StackPanel Orientation="Horizontal">
<RadioButton Content="1t" />
<RadioButton Content="2t" Margin="8,0" />
</StackPanel>
</GroupBox>
</Grid>
</TabItem>
<TabItem Header="tab2">
</TabItem>
</TabControl>
</Grid>
</Window>
结果:
对所有 WPF 程序员的最后评论:不要使用 Canvas
并避免硬编码 Width
、Height
和其他此类属性。将 Grid 与 proprotional 或 Auto 列一起使用。