【发布时间】:2013-07-02 05:23:19
【问题描述】:
开头是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 这样的东西,这不起作用
谢谢
【问题讨论】:
-
好吧,假设您在
Grid中使用此DataTemplate,您为什么不相应地设置您的Grid.ColumnDefinitions,使其宽度为使用此@987654326 的列的“0.2*” @ 然后从您的Datatemplate中删除固定宽度规格。使用TryFindResource(...)只会让您的代码变得破旧,并在以后给您带来更多问题。您也可以使用转换器来执行“ActualWidth/5”,但请不要。以正确的方式使用 WPF(限制“幻数”固定大小规范),您将拥有更好的构建应用程序的体验。 -
嗯,但我使用 DataTemplate 进行列表视图,我将编辑第一篇文章并显示
-
不确定我是否理解你说的对:) 在 DataTemplate 中,我有 5 个 TextBlocks 的 wrappanel。所以现在我需要将 Listview 放入 Column - 好的。但是 WrapPanel 中的所有控件怎么样?我只想将整个宽度拆分为 5 个控件(TextBlocks),它们位于 Wrappanel 内。
-
在这种情况下,当不使用 Grid.ColumnDefinition 时,只需将 ListView 放入 0.2* 的网格宽度。但我想在 DataTemplate 中声明 0.2* foreach 控件。所以我需要为 ListView 设置 100% 的宽度,并从 DataTemplate 中获取 foreach 控件,例如 ColumnDefinition 来定义它们的宽度
-
现在我明白了。作为DataTemplate,我应该使用带有列定义的Grid而不是Wrappanel,对吗? ;) 好的,现在似乎一切正常,但是 0.2* 宽度计算为 20% ow 宽度?因为看起来不像:P
标签: wpf resources datatemplate