WP7 usercontrol относительная высота - PullRequest
0 голосов
/ 24 июня 2011

У меня есть сетка с несколькими рядами.У меня есть пользовательский элемент управления, который я помещаю в одну из строк, с размахом строки 2. Все строки имеют одинаковую высоту.Я установил вертикальное выравнивание пользовательского элемента управления по центру, чтобы оно отображалось в середине двух строк.Я хочу, чтобы пользовательский элемент управления имел высоту 1 из строк сетки, независимо от высоты сетки.Таким образом, в действительности пользовательский элемент управления будет расти по высоте относительно высоты строки в сетке, поскольку высота строки также зависит от высоты сетки.

Ответы [ 2 ]

1 голос
/ 24 июня 2011

Кажется, что вы можете захотеть, чтобы данные связывали высоту пользовательского элемента управления с высотой RowDefinition.Этот вопрос чем-то похож, но он связывает высоту строки, а не содержащийся в ней элемент: Как мне привязать ширину ColumnDefinition или высоту RowDefinition?

Я пробовал простой подход, который может быть недоволенно может удовлетворить ваши потребности.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Grid ShowGridLines="True">  
    <Grid.RowDefinitions>
      <RowDefinition Height="1*"/>
      <RowDefinition Height="1*"/>
      <RowDefinition Height="1*"/>
      <RowDefinition Height="1*"/>
      <RowDefinition Height="1*"/>
    </Grid.RowDefinitions>

    <Rectangle x:Name="measurementRect" VerticalAlignment="Stretch" Grid.Row="1" Fill="Blue" Width="1" Visibility="Hidden" />
    <Rectangle Grid.Row="2" Grid.RowSpan="2"
      VerticalAlignment="Center" Fill="Green" Height="{Binding ElementName=measurementRect,Path=ActualHeight}" Width="200" />
  </Grid>
</Page>
0 голосов
/ 24 июня 2011

Сначала я подумал, что связывание высоты вашего пользовательского элемента управления с высотой строки через общее свойство может сработать, однако мне пришло в голову, что вы не можете связать высоту строки как подклассы RowDefinition DependencyObject, но метод SetBinding являетсяопределено в FrameworkElement.

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

Пример свойства

private int controlHeight;
public int ControlHeight
{
  get 
  {
     int row = Grid.GetRow(this.myControl);
     return myGrid.RowDefinitions[row].Height;
   }
   set
   {
       controlHeight = value;
       //Implement property changed event etc here if needed
    }
 } 

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

Обратите внимание: поскольку вы используете colSpan, вам может потребоваться разделить высоту строки на 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...