none
WPF Grid. Пропорциональные значения ширины и высоты ячейки RRS feed

  • Вопрос

  • Задача состоит вот в чём: надо сделать окошко, способное менять размеры. В окошке есть правая часть - её ширина фиксирована. Левая часть должна быть квадратной - width = height.

    Надо как-то связать эти звёздочки *

    <Grid>
    <Grid.RowDefinitions>
    <RowDefinition Height="*" Name="MyGridRow"></RowDefinition>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" Name="MyGridColomn"></ColumnDefinition>
    <ColumnDefinition Width="100"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    </Grid>

    • Перемещено Siddharth Chavan 1 октября 2010 г. 20:57 MSDN Forums Consolidation (От:Технологии .NET Framework: ADO.NET, WCF, WPF etc)
    21 сентября 2010 г. 21:51

Ответы

  • Так не получится хотя бы потому что окно может менять размеры произвольно, поэтому либо левая часть будет квадратной, но правая будет менять ширину, либо левая часть не будет квадратной, а правая часть будет менять ширину, иначе нужно запрещать изменять размеры окна как угодно.

    Вот пример с квадратной левой частью, но ширина правой колонки меняется

    <Window x:Class="WpfApplication1.MainWindow"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Title="MainWindow" SizeToContent="WidthAndHeight" 
      Name="wnd" ResizeMode="CanResizeWithGrip" >
     <Grid Name="mainGrid" ShowGridLines="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
      <Grid.ColumnDefinitions>
       <ColumnDefinition Name="leftCol" Width="{Binding Path=ActualHeight, ElementName=wnd}"/>
       <ColumnDefinition MinWidth="200"/>   
      </Grid.ColumnDefinitions>
      <Rectangle Grid.Column="0" Fill="Green" MinWidth="100" MinHeight="100"/>
      <Rectangle Grid.Column="1" Fill="AliceBlue" MinWidth="100" MinHeight="100"/>
     </Grid>
    </Window>
    

     

    • Помечено в качестве ответа regerus 27 сентября 2010 г. 21:32
    22 сентября 2010 г. 0:31

Все ответы

  • Так не получится хотя бы потому что окно может менять размеры произвольно, поэтому либо левая часть будет квадратной, но правая будет менять ширину, либо левая часть не будет квадратной, а правая часть будет менять ширину, иначе нужно запрещать изменять размеры окна как угодно.

    Вот пример с квадратной левой частью, но ширина правой колонки меняется

    <Window x:Class="WpfApplication1.MainWindow"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Title="MainWindow" SizeToContent="WidthAndHeight" 
      Name="wnd" ResizeMode="CanResizeWithGrip" >
     <Grid Name="mainGrid" ShowGridLines="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
      <Grid.ColumnDefinitions>
       <ColumnDefinition Name="leftCol" Width="{Binding Path=ActualHeight, ElementName=wnd}"/>
       <ColumnDefinition MinWidth="200"/>   
      </Grid.ColumnDefinitions>
      <Rectangle Grid.Column="0" Fill="Green" MinWidth="100" MinHeight="100"/>
      <Rectangle Grid.Column="1" Fill="AliceBlue" MinWidth="100" MinHeight="100"/>
     </Grid>
    </Window>
    

     

    • Помечено в качестве ответа regerus 27 сентября 2010 г. 21:32
    22 сентября 2010 г. 0:31
  • спасибо :) этот вариант тоже подойдёт
    27 сентября 2010 г. 21:32