![](/img/trans.png)
[英]Updating the height and width of a Silverlight child element dynamically
[英]binding height/width to child element in XAML
首先,我要对不起,如果这是重复的话。 我在已读过的任何类似帖子中都找不到答案。 我遇到一个Border
控件,该控件的Height
和Width
绑定到作为Border
的子级的TextBlock
的ActualHeight
和ActualWidth
,这是一个问题。
一切在设计器中都可以正常显示,但是由于运行时的某些原因, Border
控件不可见。 我不确定是否是因为Height
或Width
可能为0
,或者是否以其他方式设置了Visibility
。 如果我对“ Height
/ Width
进行硬编码,那么在设计器中和运行时所有内容都将显示相同,但是这种绑定的行为有些奇怪。 更奇怪的是,它们曾经在工作,我不确定我能做些什么来打破它们。 这是我的XAML:
<Grid Visibility="{Binding Path=Contacts.Count, Converter={StaticResource ItemCountToVisibilityConverter}}" >
<Border CornerRadius="5"
BorderBrush="White"
BorderThickness="2"
Padding="20,15,0,15"
Margin="0,15,0,15">
<ListView ItemsSource="{Binding Path=Contacts}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=Number}" />
<TextBlock Text="{Binding Path=EmailAddress}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Border>
<Border Background="White"
CornerRadius="5"
Height="{Binding Path=ActualHeight, ElementName=ContactsTextBlock}"
Width="{Binding Path=ActualWidth, ElementName=ContactsTextBlock}"
VerticalAlignment="Top">
<TextBlock Text="Contact Information"
x:Name="ContactsTextBlock"
Foreground="Black"
Padding="5,2,5,2"
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Border>
</Grid>
出现此问题的是XAML中的第二个Border
控件。 如我所说,它在设计器中正确显示,但是由于运行时的某些原因,它所包含的Border
控件以及TextBlock
都不可见。 另外, Grid
以及ListView
和第一个Border
都正常工作。 仅仅是第二个Border
和TextBlock
无法正常运行。
提前致谢!
这是在设计时的外观:
让网格为您完成肮脏的工作。 我相信网格是WPF最好的控件之一。
技巧是将垂直空间分成三个切片,其中顶部的两个切片将根据所需的空间进行大小调整。 也就是说,TextBlock将确定行对的高度。 除了享受结果,您无需做任何事情...
这是一个示例XAML(为简单起见,我剪切了Visibility属性):
<Grid Margin="40,20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border
CornerRadius="5"
BorderBrush="White"
BorderThickness="2"
Padding="20,15,20,15"
Background="DimGray"
Grid.Row="1"
Grid.RowSpan="2"
>
<ListView ItemsSource="{Binding Path=Contacts}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=Number}" />
<TextBlock Text="{Binding Path=EmailAddress}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Border>
<Border
Background="White"
CornerRadius="5"
Grid.Row="0"
Grid.RowSpan="2"
HorizontalAlignment="Center"
>
<TextBlock
Text="Contact Information"
x:Name="ContactsTextBlock"
Foreground="Black"
Padding="5,2,5,2"
/>
</Border>
</Grid>
请注意,ListView边框共享中间行,以便边界线可以“敲”文本。
如下所示:
您可能要设置BorderThickness
和BorderBrush
:
<Border Background="White"
Border Background="White"
CornerRadius="5"
BorderThickness="1"
BorderBrush="Gray"
HorizontalAlignment="Center"
VerticalAlignment="Top">
<TextBlock Text="Contact Information"
x:Name="ContactsTextBlock"
Foreground="Black"
Padding="5,2,5,2"
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Border>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.