好的,我得到了以下DataTemplate:
Style="{StaticResource LBStyle}" HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Label Content="{Binding Name}" x:Name="txt" Grid.Column="0"></Label>
<StackPanel Orientation="Vertical" Grid.Column="1">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{z:txt text=time}" Width="50">:</TextBlock>
<TextBlock Text="{Binding Path=Value, Converter={StaticResource DecFix}}" />
</StackPanel>
<StackPanel Orientation="Horizontal" Width="50">
<TextBlock Text="Norm.">:</TextBlock>
<TextBlock Text="{Binding Path=NormaalWaarde, Converter={StaticResource DecFix}}" />
</StackPanel>
</StackPanel>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsCurrentStep}" Value="True">
<Setter TargetName="txt" Property="FontWeight" Value="Bold"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
基本上我想要的是每个项目的左侧都有一些文本,它以列表框的宽度拉伸,右侧的2个值保持在右侧。 我已尝试过许多不同类型的面板,网格等等。而且它们似乎只是将右侧的值包裹在左侧的文本中,如下所示:
link text (请使用链接查看我的意思,我还不能发布图片)
如果我将相同的datatemplate独立放在其他地方,它就会做它应该做的事情。有没有人有建议?
编辑:我在列表框和窗口的其余部分之间放置了一个gridsplitter,看起来列表框正在无限延伸。这就是列表框在窗口中的其他元素之间的位置:(列表框位于tagger usercontrol中)
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="2.5*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<vid:TagControl x:Name="Tagger" Grid.Column="0"></vid:TagControl>
<GridSplitter ResizeDirection="Columns" Width="20" />
<vid:DShowPlayer x:Name="DShowPlayer1" Grid.Column="1"></vid:DShowPlayer>
</Grid>
答案 0 :(得分:1)
这里的问题当然与您的DataTemplate无关,或者您是否使用数据绑定。 ListBox或ListBoxItem样式或ControlTemplate中的某些内容导致控件在某个级别将HorizontalAlignment设置为“Stretch”。 (或者你可以使用在某种程度上忽略HorizontalAlignment的自定义测量或排列代码)
我怀疑你的Style="{StaticResource LBStyle}
是罪魁祸首,或其他一些未显示的ListBox属性。
如果单独运行,您发布的代码运行正常。搜索您的样式(以及其他属性,代码隐藏设置等)以进行任何模板替换或覆盖默认HorizontalAlignment处理的设置。
如果问题最初不明显,请逐个删除设置,直至其停止工作,然后仔细查看您删除的内容。
答案 1 :(得分:0)
我可以找到的任何DataTemplate示例都没有明确说明,但出现是DataTemplates仅在列表项来自ItemsSource绑定时应用的情况。如果直接填充Items集合,则不使用DataTemplate。
在Expression Blend中添加ItemTemplate,命令文本显示“Generated Item Template” - 这似乎意味着模板仅在间接生成项目时使用。
我可以找到的每个示例都使用项目源的数据绑定。
答案 2 :(得分:0)
你应该使用Grid代替DockPanel 3列,第1列作为1 *,2和3作为固定长度......