2013-07-04 49 views
1

在开始时获得控制性能,那里有XAML代码:从代码Grid.Resources背后

<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用的DataTemplate:

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

     </ListView> 

因此,在后面的代码我想改变TextBlock的宽度this.width/5(becouse宽度可以在另一台PC上不同),但becouse它的DataTemplate我没有获得这种控制。 我也试过WIDTH = “{绑定路径= ActualWidth的,的ElementName = grid0}”,但实际宽度我需要像ActualWidth的/ 5,这不工作

感谢

+1

那么假设你在'Grid'使用'DataTemplate',你为什么不只是设置你的'Grid.ColumnDefinitions'因此有宽度,说:“0.2 *“使用该”DataTemplate“,然后从”Datatemplate“中全部删除固定宽度的规格。 'TryFindResource(...)'的使用会让你的代码变得简陋,并在以后给你更多的问题。您也可以使用转换器来执行“ActualWidth/5”,但不要。以正确的方式使用WPF(限制“魔术数字”固定大小规格),并且您将有更好的体验来构建您的应用程序。 – Viv

+0

嗯,但使用DataTemplate中的列表视图,生病编辑的第一篇文章,并显示该IM – user13657

+0

不知道如果我明白你的意思吧:) 在DataTemplate中我有5周的TextBlocks wrappanel。所以现在我需要将Listview放入列 - 确定。但是如何处理WrapPanel中的所有控件?我只是想将整个宽度分成5个控件(TextBlocks),它们都在Wrappanel中。 – user13657

回答

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; 
    } 
1

使用Grid 5列和每个Width="0.2*"将正常工作时,所有的子元素的DesiredWidth已满足(换句话说,当网格的尺寸足够大,以适应与平等的空间中的所有列)。如果无法做到这一点,布局的工作方式来修剪它可以的元素,并为其他需要它的列提供额外的空间,从而在此过程中覆盖Width="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>