1

一开始,有xaml代码:

<Grid.Resources>
            <DataTemplate x:Name="dataTemp" x:Key="dtKey">
                <WrapPanel Orientation="Horizontal" Name="mainWP">
                    <TextBlock Name="codeTB" FontSize="18" Width="200" Text="{Binding barcode}"></TextBlock>
(...)
               </WrapPanel>
            </DataTemplate>
        </Grid.Resources>

和带有数据模板的列表视图:

<ListView Name="testLV" Grid.Row="0" ItemTemplate="{StaticResource ResourceKey=dtKey}" >

        </ListView>

因此,在后面的代码中,我想将 TextBlock 宽度更改为 this.width/5 (因为另一台 PC 中的宽度可能不同),但是因为它是 DataTemplate,所以我无权访问此控件。我也试过 Width="{Binding Path=ActualWidth, ElementName=grid0}",但作为实际宽度我需要像 ActualWidth/5 这样的东西,它不起作用

谢谢

4

2 回答 2

1

当满足所有子元素时(换句话说,当 Grid 的大小足够大以容纳具有相等空间的所有列时),使用Grid5 列和每列都可以正常工作。如果它不能做到这一点,则布局会以一种方式来修剪它可以修剪的元素,并将额外的空间留给其他需要它的列,从而覆盖过程中的Width="0.2*"DesiredWidthWidth="0.2*"

对于您希望将 5 列平均拆分的要求,只需使用UniformGrid. 这几乎不关心上述任何事情。

所以说这样的话:

<ListView Name="paragonLV" HorizontalContentAlignment="Stretch">
  <ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}">
      <Setter Property="Padding"
              Value="0" />
      <Setter Property="BorderThickness"
              Value="0" />
    </Style>
  </ListView.ItemContainerStyle>
  <ListView.ItemTemplate>
    <DataTemplate>
      <UniformGrid MaxWidth="{Binding RelativeSource={RelativeSource FindAncestor,
                                                                      AncestorType={x:Type ScrollViewer}},
                                      Path=ActualWidth}"
                    Columns="5">
        <UniformGrid.Resources>
          <Style TargetType="{x:Type TextBlock}">
            <Setter Property="TextTrimming"
                    Value="CharacterEllipsis" />
            <Setter Property="FontSize"
                    Value="18" />
            <Setter Property="HorizontalAlignment"
                    Value="Stretch" />
          </Style>
        </UniformGrid.Resources>
        <TextBlock Text="{Binding barCode}" />
        <TextBlock Text="{Binding nazwa}" />
        <TextBlock Text="{Binding jm}" />
        <TextBlock Text="{Binding ilosc}" />
        <TextBlock Text="{Binding cena}" />
      </UniformGrid>
    </DataTemplate>
  </ListView.ItemTemplate>
</ListView>
于 2013-07-04T11:30:09.497 回答
0

使用 Grid.Columndefination 格式化您的网格或使用 Ivaluconverter 类让我们看看值转换器的开发

转换参数将您的计算参数,您知道如何构造值转换器类

 public object Convert(object value, Type targetType, 
        object parameter, CultureInfo culture)
    {
        //value is grid actual width 
       // parameter = 5 is your calculated value

           return value / parameter;
    }
于 2013-07-04T09:30:34.350 回答