繁体   English   中英

WP7用户控件的相对高度

[英]WP7 usercontrol relative height

我有一个网格,有几行。 我有一个用户控件,该控件放在行之一中,行距为2。所有行都具有相同的高度。 我将用户控件的垂直对齐方式设置为居中,因此它出现在两行的中间。 我想要的是用户控件的高度为网格行的1,而与网格的高度无关。 因此,实际上,用户控件的高度将相对于网格中行的高度增加,因为行的高度也相对于网格高度。

似乎您可能想将用户控件的高度绑定到RowDefinition的高度。 这个问题有些相似,但他绑定的是行高,而不是包含的元素: 如何对ColumnDefinition的Width或RowDefinition的Height进行数据绑定?

我尝试了一种简单的方法,该方法可能会令您皱眉,但可能适合您的需求。

<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>

我首先认为通过公用属性将用户控件的高度数据绑定到行的高度可能行得通,但是在我看来,由于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
    }
 } 

如果要确保控件大小可以动态缩放(加载时除外),则需要其他代码来更新属性并通知UI。 您也可以检查网格的高度,并除以该属性中的列数,尽管这可能不那么可扩展。

请注意,因为您使用的是colSpan,所以可能需要将行高除以2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM