WPF - 最大化应用程序窗口不会垂直扩展控件 - 横向扩展控件

时间:2008-12-18 17:23:34

标签: wpf controls

当我按下WPF应用程序上的“最大化”按钮时,其中的所有控件都完全水平扩展,但它们不会展开以垂直填充窗口。我认为最大化水平处理它,它也应该垂直处理它。我应该在每个控件的某处设置属性吗?我可以捕获Resize事件,但是通过所有控件并仅垂直调整它们似乎需要做很多工作。

感谢您的帮助。

6 个答案:

答案 0 :(得分:3)

FYI。我最终将网格的高度更改为“自动”,然后当Window1的SizeChanged事件触发时,我将网格高度设置为e.NewSize.Height减去StackPanel中位于其上方的控件的ActualHeights 。不是我希望它如何,但到目前为止,我发现唯一有效的解决方案。

感谢。

答案 1 :(得分:0)

你能告诉我们一些Xaml吗?尝试将外部容器设置为VerticalAlignment =“Stretch”

答案 2 :(得分:0)

预览窗口会切断部分XAML,但会在答案文本框中显示确定。如果遇到好的话请告诉我。 VerticalAlignment =“拉伸”没有帮助。

<Window x:Class="MainScreen.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:MainScreen"
    xmlns:r="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"
    xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit" 
    WindowStartupLocation="CenterScreen"
    Title="Nodes" Height="600" Width="800"
    >
    <!-- The "toolkit" namespace above is for the data grid control.  It's reference is WPFToolkit. -->
    <Window.CommandBindings>
        <CommandBinding Command="{StaticResource LineTopologyCommand}" Executed="OnLineTopology" />
        <CommandBinding Command="{StaticResource PointToPointTopologyCommand}" Executed="OnPointToPointTopology" />
        <CommandBinding Command="{StaticResource PointToMultiPointTopologyCommand}" Executed="OnPointToMultiPointTopology" />
        <CommandBinding Command="{StaticResource MultiToMultiTopologyCommand}" Executed="OnMultiToMultiTopology" />
        <CommandBinding Command="{StaticResource CesTopologyCommand}" Executed="OnCESTopology" />
        <CommandBinding Command="{StaticResource AllTopologyCommand}" Executed="OnAllTopology" />
    </Window.CommandBindings>
    <StackPanel VerticalAlignment="Stretch">
        <r:Ribbon Name="mRibbon" DockPanel.Dock="Top">
            <r:Ribbon.Resources>
                <r:RibbonGroupSizeDefinitionCollection x:Key="ViewLayout">
                    <r:RibbonGroupSizeDefinition>
                        <!-- Control sizes: L,L,L -->
                        <r:RibbonControlSizeDefinition ImageSize="Small" IsLabelVisible="True"/>
                        <r:RibbonControlSizeDefinition ImageSize="Small" IsLabelVisible="True"/>
                        <r:RibbonControlSizeDefinition ImageSize="Small" IsLabelVisible="True"/>
                        <r:RibbonControlSizeDefinition ImageSize="Small" IsLabelVisible="True"/>
                        <r:RibbonControlSizeDefinition ImageSize="Small" IsLabelVisible="True"/>
                        <r:RibbonControlSizeDefinition ImageSize="Small" IsLabelVisible="True"/>
                    </r:RibbonGroupSizeDefinition>
                </r:RibbonGroupSizeDefinitionCollection>
            </r:Ribbon.Resources>
            <r:Ribbon.ApplicationMenu>
                <r:RibbonApplicationMenu>
                    <r:RibbonApplicationMenu.Command>
                        <r:RibbonCommand
                            Executed="OnCloseApplication"
                            LabelDescription="Application Button"
                            SmallImageSource="Images/SEL.ico"
                            LargeImageSource="Images/SEL.ico"
                            ToolTipTitle="SEL Network Management System"
                            ToolTipDescription="" />
                    </r:RibbonApplicationMenu.Command>
                </r:RibbonApplicationMenu>
            </r:Ribbon.ApplicationMenu>
            <r:Ribbon.QuickAccessToolBar>
                <r:RibbonQuickAccessToolBar CanUserCustomize="True">
                </r:RibbonQuickAccessToolBar>
            </r:Ribbon.QuickAccessToolBar>
            <r:RibbonTab Label="View" MouseLeftButtonUp="RibbonTab_View_MouseLeftButtonUp">
                <r:RibbonTab.Groups>
                    <r:RibbonGroup GroupSizeDefinitions="{StaticResource ViewLayout}">
                        <r:RibbonGroup.Command>
                            <r:RibbonCommand LabelTitle="Topology"/>
                        </r:RibbonGroup.Command>
                        <r:RibbonButton Command="{StaticResource LineTopologyCommand}"/>
                        <r:RibbonButton Command="{StaticResource PointToPointTopologyCommand}" />
                        <r:RibbonButton Command="{StaticResource PointToMultiPointTopologyCommand }" />
                        <r:RibbonButton Command="{StaticResource MultiToMultiTopologyCommand }" />
                        <r:RibbonButton Command="{StaticResource CesTopologyCommand }" />
                        <r:RibbonButton Command="{StaticResource AllTopologyCommand }" />
                    </r:RibbonGroup>
                </r:RibbonTab.Groups>
            </r:RibbonTab>
            <r:RibbonTab Label="Home" MouseLeftButtonUp="RibbonTab_Home_MouseLeftButtonUp">

            </r:RibbonTab>
            <r:RibbonTab Label="Device Designer">

            </r:RibbonTab>
            <r:RibbonTab Label="Network Design">

            </r:RibbonTab>
        </r:Ribbon>
        <StackPanel DockPanel.Dock="Top" Orientation="Horizontal" HorizontalAlignment="Center">
            <StackPanel.Resources>
                <Style x:Name="ButtonStyle" TargetType="{x:Type Button}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type Button}">
                                <Border Name="theBorder" BorderBrush="Gray" BorderThickness="2" 
                            CornerRadius="10" Padding="5" Background="{TemplateBinding Background}">
                                    <ContentPresenter/>
                                </Border>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsMouseOver" Value="True">
                                        <Setter TargetName="theBorder" Property="BorderBrush" Value="#333333"/>
                                    </Trigger>
                                    <Trigger Property="IsPressed" Value="True">
                                        <Setter TargetName="theBorder" Property="Background" Value="#CCCCCC"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </StackPanel.Resources>
            <Label Content="Number of Nodes"/>
            <TextBox x:Name="NumNodes"  HorizontalAlignment="Right" Margin="0,0,6.71,0" Width="30"/>
            <Slider
                    x:Name="uiScaleSlider"
                    Width="78"
                    HorizontalAlignment="Left"
                    VerticalAlignment="Top"
                    ToolTip="Determines the UI scale factor."
                    Height="27"
                    Value=".1" Minimum=".5" Maximum="5"
                    Orientation="Horizontal"
                    Ticks="1"
                    IsSnapToTickEnabled="False"
                    TickFrequency="1"
                    TickPlacement="BottomRight"
                    AutoToolTipPlacement="BottomRight"
                    AutoToolTipPrecision="2" />
            <Button Name="AddNodes" Content="Add Nodes" Margin="0,0,10,0"/>
            <Button Name="Clear" Content="Clear" Margin="0,0,5,0"/>
        </StackPanel>
        <Grid VerticalAlignment="Stretch" x:Name="mainGrid" Margin="2,5,0,0" Height="390" Background="WhiteSmoke">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="2*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="3*"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <GridSplitter Grid.Column="0" Grid.RowSpan="2" Width="5" ResizeDirection="Columns" Grid.ColumnSpan="1" Height="Auto" ResizeBehavior="BasedOnAlignment" VerticalAlignment="Stretch"/>
            <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
                <local:Graph x:Name="theGraphPanel" Background="#FFE7CEBF" Grid.Column="0" Grid.Row="0" Margin="2,2,2,2">
                    <local:Graph.LayoutTransform>
                        <ScaleTransform
                                    CenterX="0" CenterY="0"
                                    ScaleX="{Binding Path=Value, ElementName=uiScaleSlider}"
                                    ScaleY="{Binding Path=Value, ElementName=uiScaleSlider}"
                                />
                    </local:Graph.LayoutTransform>
                </local:Graph>
            </ScrollViewer>
            <TabControl x:Name="mTabControl"  Grid.Column="1" Grid.RowSpan="2" Margin="3,0,0,2">
                <TabItem Name="Item1" Header="Circuit">
                    <TreeView>
                        <TreeViewItem Header="Ring1">
                            <TreeViewItem Header="Site 1">
                                <TreeViewItem Header="Node 1">
                                    Data (#113)
                                </TreeViewItem>
                                <TreeViewItem Header="Node 2">
                                    Data (#114)
                                </TreeViewItem>
                                <TreeViewItem Header="Node 3">
                                    Data (#115)
                                </TreeViewItem>
                            </TreeViewItem>
                            <TreeViewItem Header="Site 2">
                            </TreeViewItem>
                        </TreeViewItem>
                        <TreeViewItem Header="Ring 2">
                            <TreeViewItem Header="Site 2">
                                <TreeViewItem Header="Node 1">
                                    Data (#7)
                                </TreeViewItem>
                            </TreeViewItem>
                        </TreeViewItem>
                    </TreeView>
                </TabItem>
                <TabItem Name="Item2" Header="Inventory"></TabItem>
            </TabControl>
            <GridSplitter Grid.Row="1" ResizeDirection="Rows" ResizeBehavior="BasedOnAlignment" HorizontalAlignment="Stretch" Name="GridSplitter1" Height="5" VerticalAlignment="Top" />
        </Grid>
    </StackPanel>
</Window>

答案 3 :(得分:0)

当您调整窗口大小时,有问题的控件是否会缩小/垂直增长?

您正在将网格的高度属性设置为“390”,这使其垂直固定大小。如果这是你对其他一切的“父母”控制,那么他们将从中获得关键。

答案 4 :(得分:0)

是的,这是我调整窗口大小时不会垂直收缩/增长的控件。

自从我写完以来,我将网格高度更改为auto,当我运行我的应用程序时,网格,因为它是StackPanel中的最后一个控件,只占用窗口中剩余空间的一部分首先显示 - 可能是390中的80个。在第0行,第0列,我有一个自定义面板(theGraphPanel),我在其中绘制一个圆形节点。如果我绘制20个节点,那个单元格大小适当,甚至在最大化时占据整个屏幕。这有点解决了这个问题,虽然垂直滚动不起作用,因为我认为它认为它有无限的高度。

当我将大小设置为390时,我希望网格显示在屏幕上的方式 - 第一行占用剩余空间的高度3 *,第二行占用*高度。我想我想要做的是模拟MDI设置。当我第一次启动应用程序(800 x 600)然后当我最大化它时,我希望比例保持不变。据我所知,除非网格单元具有内容,否则它们将保持最小尺寸并且在整体网格高度设置为“自动”时增长到内容的任何大小。也许我正在尝试做一些不可能的事情。

感谢目前为止的答案。

答案 5 :(得分:0)

为什么不使用嵌套网格

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition Height="33"></RowDefinition>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="120"></ColumnDefinition>            
        <ColumnDefinition Width="200"></ColumnDefinition>
        <ColumnDefinition Width="3"></ColumnDefinition>
        <ColumnDefinition Width="*"></ColumnDefinition>
    </Grid.ColumnDefinitions>        
    <GridSplitter Grid.Column="2" Grid.Row="0" 
        Height="Auto" Width="Auto" HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" />

    <Grid Grid.Column="0" Margin="4,10,2,0" Grid.Row="0" VerticalAlignment="Stretch">
        <Grid.RowDefinitions>
            <RowDefinition Height="20"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <TextBlock Grid.Column="0" Grid.Row="0" Style="{StaticResource HeaderText}" FontSize="13" >Templates</TextBlock>

        <ListBox Grid.Column="0" Grid.Row="1" FontSize="13" >
            <ListBoxItem>
                Blank
            </ListBoxItem>
            <ListBoxItem>
                New from existing...
            </ListBoxItem>
        </ListBox>

    </Grid>

    <ListView Grid.Column="1" Style="{StaticResource MyView}" Grid.Row="0" Margin="2,10,2,0">
        <ListViewItem>item1</ListViewItem>
    </ListView>

    <ListView Grid.Column="3" Style="{StaticResource MyView}" Grid.Row="0" Margin="2,10,4,0">
        <ListViewItem>item1</ListViewItem>
    </ListView>

    <WrapPanel Grid.Row="1" Grid.Column="3" HorizontalAlignment="Right">
        <Button Height="22" Width="60">Create</Button>
        <Button Height="22" Width="60">Cancel</Button>
    </WrapPanel>

</Grid>