2013-04-27 2 views
1

У меня есть окно WPF, которое содержит сетку. Он настроен на то, чтобы выглядеть как панель «Шашки», поэтому мне нужно, чтобы квадраты сетки оставались квадратными при изменении размера окна.WPF Resize Window пропорционально то есть. Нет растяжения или искажения?

Я пробовал много вещей, но ничего не работает. Надеюсь, это просто вопрос получения правильного атрибута, а не что-то сложное, но мне нужно его пропорционально изменить в любом случае.

Я также не уверен, что это произойдет в сетке или в окне. Я бы предположил окно, потому что это контроллер для изменения размера, но я мог ошибаться. Любые предложения?

XAML для окна:

<Window x:Class="TicTacToeClient.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:TicTacToeClient" 
    Title="Mini-Checkers V1.1" Height="600" Width="600" 
     MinHeight="200" MinWidth="200" MaxHeight="600" MaxWidth="600" > 
<DockPanel> 
    <Menu DockPanel.Dock="Top"> 
     <MenuItem Header="Game"> 
      <MenuItem Header="Set Ip Address" Name="IPAddressMenuItem"/> 
      <MenuItem Header="Set Name" Name="SetNameMenuItem"/> 
     </MenuItem> 
    </Menu> 
    <TextBlock DockPanel.Dock="Bottom" Text ="Status: " Name="GameStatusBar" /> 
    <local:TicTacToeBoard x:Name="GameBoard" /> 
</DockPanel> 

XAML для сетки:

<UserControl x:Class="TicTacToeClient.TicTacToeBoard" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="600" d:DesignWidth="600"> 

<Grid Name="MainGrid"> 
    <Grid.RowDefinitions> 
    .... 

ответ

1

Я хотел бы предложить DataBindingWidth вашей Grid к Height (или наоборот). Это будет гарантировать, что он всегда будет увеличиваться пропорционально. Что-то же просто, как это должно работать:

<Grid x:Name="Checkerboard" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="{Binding RelativeSource={RelativeSource Self}} Path=ActualHeight}"> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions>   
    <!-- Grid Contents --> 
</Grid> 

И если вы хотите, чтобы ваши клетки все останется квадрат, просто убедитесь, что все они * размера, поэтому они будут распространяться в равной степени.

0

В качестве альтернативы, вы можете поставить Йор сетку внутри Viewbox с Stretch="Uniform"

0

Вы можете попробовать ограждающих ваш GameBoard в ViewBox с Stretch набор недвижимости в Uniform и StretchDirection набор для обоих. как это. Он не будет поддерживать единообразное соотношение формы и формы формы, но будет поддерживать равномерность пропорций GameBoard.

<Viewbox Stretch="Uniform" StretchDirection="Both"> 
    <local:TicTacToeBoard x:Name="GameBoard" /> 
</Viewbox>