C# 控件不适合调整WPF大小的窗体
我正在尝试创建一个响应性强的应用程序,我所做的所有努力都没有在新的标准WPF上给出结果。 我会确保在缩小或扩展表单时调整应用程序控件的大小。 从图片中可以看出,缩小表单时,项目3不完全可见,因此不适合用户提供的新尺寸。 如何创建可以自动调整控件的应用程序?在正常情况下,我这样做没有问题,但在WPF中,我并不真正理解如何自动适应,尽管我已经阅读了大量教程。多谢各位 代码:C# 控件不适合调整WPF大小的窗体,c#,wpf,controls,dock,C#,Wpf,Controls,Dock,我正在尝试创建一个响应性强的应用程序,我所做的所有努力都没有在新的标准WPF上给出结果。 我会确保在缩小或扩展表单时调整应用程序控件的大小。 从图片中可以看出,缩小表单时,项目3不完全可见,因此不适合用户提供的新尺寸。 如何创建可以自动调整控件的应用程序?在正常情况下,我这样做没有问题,但在WPF中,我并不真正理解如何自动适应,尽管我已经阅读了大量教程。多谢各位 代码: <Window xmlns="http://schemas.microsoft.com/winfx/2006/x
<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>
spancore spancore
图像示例:
<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程序员的最后一点意见是:不要使用
画布
,避免硬编码的宽度
、高度
和其他类似属性。使用网格代替Proproprotational或Auto列。不要使用Canvas
,因为它是WPF,而不是Windows窗体。好的,我已经删除了Canvas组件。现在的问题是,调整窗体大小时,item1和item2仍固定在左侧,这很好,但我希望在展开窗口时,此控件必须放大其尺寸。好的解决方案。如何处理彼此距离太远的单选按钮(1t和2t)?删除水平对齐
属性或复制更新的示例。好的,谢谢。我还有最后一个问题要问你:当窗口最大化时,item3会超出正确附着到右侧边缘的范围,而其他控件item1和item2不会在横向模式下调整大小。我得到了如此不成比例的控制,为什么会发生这种情况?你可以像我上次更新时那样玩
: