在开始时,theres 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 with datatemplate:
<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这样的东西,它不起作用
由于
答案 0 :(得分:1)
当满足所有子元素Grid
时,使用包含5列且每个Width="0.2*"
的{{1}}将正常工作(换句话说,当网格的大小足够大时)适合所有具有相同空间的列)。如果它不能这样做,布局的工作方式是修剪它可以的元素,并为需要它的其他列提供额外的空间,从而覆盖过程中的DesiredWidth
对于您希望将5列平均分割的要求,只需使用Width="0.2*"
即可。这几乎不关心任何上述事情。
所以说:
UniformGrid
答案 1 :(得分: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;
}