繁体   English   中英

将高度/宽度绑定到XAML中的子元素

[英]binding height/width to child element in XAML

首先,我要对不起,如果这是重复的话。 我在已读过的任何类似帖子中都找不到答案。 我遇到一个Border控件,该控件的HeightWidth绑定到作为Border的子级的TextBlockActualHeightActualWidth ,这是一个问题。

一切在设计器中都可以正常显示,但是由于运行时的某些原因, Border控件不可见。 我不确定是否是因为HeightWidth可能为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都正常工作。 仅仅是第二个BorderTextBlock无法正常运行。

提前致谢!

这是在设计时的外观:

联系人信息图像

让网格为您完成肮脏的工作。 我相信网格是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边框共享中间行,以便边界线可以“敲”文本。

如下所示:

在此处输入图片说明

您可能要设置BorderThicknessBorderBrush

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

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