Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控件不适合调整WPF大小的窗体_C#_Wpf_Controls_Dock - Fatal编程技术网

C# 控件不适合调整WPF大小的窗体

C# 控件不适合调整WPF大小的窗体,c#,wpf,controls,dock,C#,Wpf,Controls,Dock,我正在尝试创建一个响应性强的应用程序,我所做的所有努力都没有在新的标准WPF上给出结果。 我会确保在缩小或扩展表单时调整应用程序控件的大小。 从图片中可以看出,缩小表单时,项目3不完全可见,因此不适合用户提供的新尺寸。 如何创建可以自动调整控件的应用程序?在正常情况下,我这样做没有问题,但在WPF中,我并不真正理解如何自动适应,尽管我已经阅读了大量教程。多谢各位 代码: <Window xmlns="http://schemas.microsoft.com/winfx/2006/x

我正在尝试创建一个响应性强的应用程序,我所做的所有努力都没有在新的标准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>

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不会在横向模式下调整大小。我得到了如此不成比例的控制,为什么会发生这种情况?你可以像我上次更新时那样玩