WPF - окно максимизации приложения не расширяет элементы управления по вертикали - по горизонтали - PullRequest
1 голос
/ 18 декабря 2008

Когда я нажимаю кнопку «Развернуть» в моем приложении WPF, все элементы управления в нем расширяются по горизонтали, но не расширяются, заполняя окно по вертикали. Я полагаю, что Maximize обрабатывает его горизонтально, он должен также обрабатывать его вертикально. Должен ли я установить свойство где-то на каждом элементе управления? Я могу поймать событие Resize, но мне кажется, что нужно проделать много работы, чтобы просмотреть все элементы управления и изменить их размер только по вертикали.

Спасибо за вашу помощь.

Ответы [ 6 ]

3 голосов
/ 19 декабря 2008

FYI. Я закончил тем, что изменил Высоту сетки на «Авто», а затем, когда сработало событие SizeChanged для Window1, я установил Высоту сетки на e.NewSize.Height минус ActualHeights элементов управления в StackPanel, которые находятся над ним. , Не так, как хотелось бы, но пока единственное решение, которое я нашел, работает.

Спасибо.

0 голосов
/ 05 мая 2009

Почему бы просто не использовать вложенные сетки

<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>    
0 голосов
/ 18 декабря 2008

Да, это элемент управления, который не сжимается / не увеличивается вертикально, когда я изменяю размер окна.

С тех пор, как я написал, я изменил высоту сетки на авто, которая при запуске моего приложения сетка, поскольку она является последним элементом управления в StackPanel, занимает только часть оставшегося пространства в окне, когда оно сначала показывается - может быть, 80 из 390. В строке 0, столбце 0 у меня есть пользовательская панель (theGraphPanel), где я рисую узлы в круге. Если я нарисую, скажем, 20 узлов, то размеры ячеек будут подходящими даже для того, чтобы занимать весь экран, когда он развернут. Это несколько решает проблему, хотя вертикальная прокрутка не работает, потому что я считаю, что она имеет бесконечную высоту.

Мне бы хотелось, чтобы сетка отображалась на экране так же, как и при установке размера 390 - первый ряд занимает 3 * высоты оставшегося пространства, а второй ряд * * высоты. Я думаю, что я пытаюсь сделать, это симулировать настройку MDI. Я хочу, чтобы пропорции оставались неизменными при первом запуске приложения (800 x 600), а затем при его максимизации. Из того, что я могу сказать, если только у ячеек сетки нет содержимого, они будут оставаться на минимальном размере и увеличиваться до любого размера содержимого, когда общая высота сетки будет установлена ​​на «Авто». Возможно, я пытаюсь сделать что-то, что невозможно.

Спасибо за ответы.

0 голосов
/ 18 декабря 2008

Уменьшается / увеличивается ли соответствующий элемент управления при изменении размера окна?

Вы устанавливаете атрибут высоты сетки на «390», что делает его фиксированным размером по вертикали. Если это ваш «родительский» контроль для всего остального, они будут исходить из этого.

0 голосов
/ 18 декабря 2008

Окно предварительного просмотра отключает некоторые из XAML, но отображается в текстовом поле ответа ОК. Дайте мне знать, если все в порядке или нет. VerticalAlignment = "Stretch" не помогает.

<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>
0 голосов
/ 18 декабря 2008

Можете ли вы показать нам немного Xaml? Попробуйте установить для внешнего контейнера значение VerticalAlignment = "Stretch"

...