首先让我先说抱歉,如果这是重复的话。我无法在我读过的任何类似帖子中找到答案。我遇到一个问题,我有一个Border
控件,其Height
和Width
绑定到ActualHeight
的{{1}}和ActualWidth
是TextBlock
的孩子。
设计器中的所有内容都显示正常,但由于某些原因,在运行时,Border
控件不可见。我不确定是不是因为Border
或Height
可能是Width
,或者0
可能是以其他方式设置的。如果我对Visibility
/ Height
进行硬编码,那么设计器和运行时的所有内容都会显示相同的内容,但是这种绑定会产生奇怪的影响。更奇怪的是,他们之前在工作,我不知道我能做些什么来打破它们。这是我的XAML:
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>
控件存在问题。正如我所说,它在设计器中正确显示,但由于某些原因,在运行时,Border
控件及其包含的Border
不可见。此外,TextBlock
工作正常,以及Grid
和第一个ListView
。它只是第二个Border
而且Border
无法正常运行。
提前致谢!
以下是设计时的样子:
答案 0 :(得分:2)
让网格为你做肮脏的工作。我相信Grid是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边框正在共享中间行,因此边线将会运行&#34; striking&#34;文本。
呈现如下:
答案 1 :(得分:0)
您可能需要设置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>