我需要修复包含不同类型元素的列表。每种类型都有自己的数据类型来表示每种类型的viewmodel。以下代码适用于我,但由于某种原因,内部数据被截断,达到某个值(看起来像默认值)。我需要删除这个转换。
这就是我所拥有的。此代码位于控件中,也可以放在列表中(可以加倍或三倍)。但我不认为这是相关的。
<ScrollViewer VerticalScrollBarVisibility="Visible">
<ListView DockPanel.Dock="Top" Name="testCaseResultListView"
ItemsSource="{Binding LogItems}"
ItemContainerStyleSelector="{StaticResource fixSideViewLogItemStyleSelector}"
SelectionMode="Single"
>
<ListView.View>
<GridView x:Name="gridView2">
<GridView.ColumnHeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Visibility" Value="Collapsed" />
</Style>
</GridView.ColumnHeaderContainerStyle>
<GridViewColumn CellTemplateSelector="{StaticResource fixSideViewLogItemTemplateSelector}"/>
</GridView>
</ListView.View>
</ListView>
</ScrollViewer>
</DockPanel>
fixSideViewLogItemTemplateSelector
和fixSideViewLogItemStyleSelector
是选择器,它们为LogItems
中的每个类型返回不同的数据类型或样式。常见的数据类型是一个有两列的网格,但这似乎也是无关紧要的 - 我试图在那里放一个文本框,它仍然被截断。
我希望将此列拉伸到整个gridView。当我设置列的宽度时,我看到列调整大小,但我希望它占据整个空间。这应该是弹性的 - 如果我在窗口中放置一个控件,它应该占据整个窗口,并在调整窗口大小时正确调整大小(使用它的列)。如果我放置两个控件,它们应该将空间分成两半,并且在调整窗口大小时仍应调整大小。
任何帮助,提示?
UPD 这是我正在使用的模板的一个例子。
<DataTemplate x:Key="testCaseDataResultTemplate">
<!-- Test case results -->
<Grid Margin="50,0,0,0" HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<!--Test case result property-->
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<!--Is retry / Name-->
<RowDefinition />
<!--Test case number-->
<RowDefinition />
<!--Low limit-->
<RowDefinition />
<!--High limit-->
<RowDefinition />
<!--Measured-->
<RowDefinition />
<!--State-->
<RowDefinition />
<!--Test time-->
<RowDefinition />
<!--Comment-->
</Grid.RowDefinitions>
<!--Is retry / Name-->
<Image Grid.Column="0" Grid.Row="0"
Source="..\Resources\retry16.png"
Stretch="None" HorizontalAlignment="Left"
Visibility="{Binding Path=IsRetry, Converter={StaticResource boolToVisibilityConverter}}" />
<TextBlock Text="fh fhgfhg fhfhfhgfhg fhgfhfhgfhgfhgfhgfhgfhgf hgfhgfhgfhgfhgfhg fhfhgfhgf hgfhgfhfhg fhfhgf rdederserswerv 2" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="0" TextWrapping="Wrap" MaxWidth="{Binding ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}}}"/>
<!--Test case number-->
<TextBlock Text="Number:" Grid.Column="0" Grid.Row="1" />
<TextBlock Text="{Binding Path=TestCaseNumber}" Grid.Column="1" Grid.Row="1" />
<!--Low limit-->
<TextBlock Text="Low limit:" Grid.Column="0" Grid.Row="2" />
<TextBlock Text="{Binding Path=TestCaseData.LimitData.LowLimit}" Grid.Column="1" Grid.Row="2" />
<!--High limit-->
<TextBlock Text="High limit: " Grid.Column="0" Grid.Row="3" />
<TextBlock Text="{Binding Path=TestCaseData.LimitData.HighLimit}" Grid.Column="1" Grid.Row="3" />
<!--Measured-->
<TextBlock Text="Measured" Grid.Column="0" Grid.Row="4" />
<TextBlock Text="{Binding Path=MeasuredValue, Converter={StaticResource valasaConverter}}" Grid.Column="1" Grid.Row="4" />
<!--State-->
<TextBlock Text="Passed: " Grid.Column="0" Grid.Row="5" />
<TextBlock Text="{Binding Path=Passed}" Grid.Column="1" Grid.Row="5" />
<!--Test time-->
<TextBlock Text="Test time: " Grid.Column="0" Grid.Row="6" />
<TextBlock Text="{Binding Path=TestTime, StringFormat={}{0:hh':'mm':'ss'.'ff}}" Grid.Column="1" Grid.Row="6" />
<!--Comment-->
<TextBlock Text="{Binding Path=ShortMessage}"
Grid.Column="0" Grid.Row="7" Grid.ColumnSpan="2"
Visibility="{Binding Path=HasComment, Converter={StaticResource boolToVisibilityColConverter}}"
VerticalAlignment="Stretch"
MaxWidth="400"
TextAlignment="Center">
<TextBlock.ToolTip>
<StackPanel>
<TextBlock Text="{Binding Path=FullMessage}"/>
</StackPanel>
</TextBlock.ToolTip>
</TextBlock>
</Grid>
</DataTemplate>
这有点乱,但很简单。它有两列 - 标题和值。这些列与截断无关。
我也试过这个模板:
<DataTemplate x:Key="testCaseDataResultTemplate">
<TextBlock Text="Long long text goes here...... ->" HorizontalAlignment="Stretch"/>
</DataTemplate>
文本当然更长:)它仍然是截断的,所以我责怪listView / GridView,而不是内部模板。
答案 0 :(得分:1)
我认为这个问题可能是您需要将ListView.HorizontalContentAlignment
设置为Stretch
。此外,项容器样式和项模板必须包含HorizontalAlignment
到Stretch
,Width
属性必须为Auto
。希望这个提示有帮助...
修改强>
另外我认为问题可能是GridViewColumn
的宽度,它可以修复项目的宽度
它自己的宽度。如果您使用的是单个列,也许您可以将ListView
更改为ListBox
或ItemsControl
,只是一个想法。
答案 1 :(得分:0)
我不知道你的模板是什么样子但是我看到这样的问题,它通常是一个没有包装的TextBlock和/或TextBlock的宽度比它的父级长。
答案 2 :(得分:0)
不能说我解决了这个难题,但至少它可以按照我的预期运作。我用GridView和里面的列删除了整个定义,并将ItemTemplateSelector直接放在ListView中。
所以我的ListView现在看起来像这样:
<ListView DockPanel.Dock="Top" Name="testCaseResultListView"
ItemsSource="{Binding LogItems}"
ItemContainerStyleSelector="{StaticResource fixSideViewLogItemStyleSelector}"
SelectionMode="Single"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
ItemTemplateSelector="{StaticResource fixSideViewLogItemTemplateSelector}">
那就做到了!希望这也会对某人有所帮助。