2013-09-23 6 views
0

я создаю приложение для Windows Phone, и я использую собственный UserControl:Изменение размера собственного пользовательского элемента управления

<UserControl x:Class="TestApp.Negyzet" 
    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" 
    FontFamily="{StaticResource PhoneFontFamilyNormal}" 
    FontSize="{StaticResource PhoneFontSizeNormal}" 
    Foreground="{StaticResource PhoneForegroundBrush}" 
    Width="100" Height="100"> 

    <Grid x:Name="LayoutRoot" Background="Transparent"> 
     <Rectangle x:Name="Kitoltoszin" Stroke="White" Width="100" Height="100" StrokeThickness="3" RadiusX="10" RadiusY="10" HorizontalAlignment="Center" VerticalAlignment="Center"> 
      <Rectangle.Fill> 
       <SolidColorBrush Color="Gray"/> 
      </Rectangle.Fill> 
     </Rectangle> 
     <TextBlock x:Name="Betu" Width="70" Height="70" 
       FontWeight="Bold" FontSize="42" Foreground="White" 
       HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center" /> 
    </Grid> 
</UserControl> 

И у меня есть окно, в котором я генерирующий элементы управления динамически, в Grid:

<Grid Grid.Row="3" VerticalAlignment="Center" HorizontalAlignment="Center" x:Name="NegyzetGrid" Background="Transparent"> 
</Grid> 

Генерация:

for (int i = 0; i < width; i++) 
{ 
    ColumnDefinition col = new ColumnDefinition(); 
    //NegyzetGrid: where I have to generate the Controls 
    NegyzetGrid.ColumnDefinitions.Add(col); 
    RowDefinition row = new RowDefinition(); 
    NegyzetGrid.RowDefinitions.Add(row); 
    for (int j = 0; j < height; j++) 
    { 
     palya[i, j] = new Negyzet(); 
     palya[i, j].IsHitTestVisible = false; 
     Grid.SetRow(palya[i, j], i); 
     Grid.SetColumn(palya[i, j], j); 
     NegyzetGrid.Children.Add(palya[i, j]); 
    } 
} 

в зависимости от того, что пользователь ч ooses, я должен генерировать элементы 3x3, 4x4 или 5x5. Я хочу создать приложение с несколькими разрешениями, и я хочу автоматически настроить собственные элементы управления, чтобы заполнить весь экран, и каждый из элементов управления должен быть одного размера. (Например, если у меня есть экран шириной 900 пикселей, и пользователь выбирает 3x3, тогда ширина элементов должна быть 300, если 4x4, затем 225 и т. Д.)

Как задать размер, подобный этому ?

ответ

1

Думаю, вам нужно установить HorizontalAlignment и VerticalAlignment как это в окне. Делая это ваш сетки будет принимать все доступное пространство:

<Grid Grid.Row="3" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" x:Name="NegyzetGrid" Background="Transparent"> 

</Grid> 

А затем в пользовательский элемент управления удалить ширину и высоту ИНТ декларации UserControl и установить VerticalAlignment и HorizontalAlignment свойство на прямоугольнике Протянуть, что необходимо сделать трюк! :

<UserControl x:Class="ST1.Negyzet" 
     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="300" d:DesignWidth="300"> 

<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <Rectangle x:Name="Kitoltoszin" Stroke="White" StrokeThickness="3" RadiusX="10" RadiusY="10" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <Rectangle.Fill> 
      <SolidColorBrush Color="Gray"/> 
     </Rectangle.Fill> 
    </Rectangle> 
    <TextBlock x:Name="Betu" Width="70" Height="70" 
       FontWeight="Bold" FontSize="42" Foreground="White" 
       HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center" /> 
</Grid> 

Смежные вопросы