我有一些Xaml(WPF),我正在尝试在代码中重新创建。我想我很接近,但我遇到了一些麻烦...这是我的Xaml:
<ListView Name="lbDevices" SelectionChanged="lbDevices_SelectionChanged" VerticalAlignment="Stretch" Grid.Row="1">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" Width="{Binding (FrameworkElement.ActualWidth), RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}" ScrollViewer.HorizontalScrollBarVisibility="Hidden"></WrapPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.View>
<GridView>
<GridView.ColumnHeaderContainerStyle>
<Style>
<Setter Property="FrameworkElement.Visibility" Value="Collapsed" />
</Style>
</GridView.ColumnHeaderContainerStyle>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<!-- This is a custom control -->
<l:HaDeviceDisplayer DataContext="{Binding .}" ></l:HaDeviceDisplayer>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
上面给出了我所需要的完美展示。它看起来像这样:
这是我尝试在代码中重新创建它:
GridView gv = new GridView();
gv.AllowsColumnReorder = false;
var hiddenStyle = new Style();
gv.ColumnHeaderContainerStyle = hiddenStyle;
gv.ColumnHeaderContainerStyle.Setters.Add(new Setter(FrameworkElement.VisibilityProperty, Visibility.Collapsed));
ItemsPanelTemplate panelTemplate = new ItemsPanelTemplate();
var fact = new FrameworkElementFactory(typeof(WrapPanel));
fact.SetValue(WrapPanel.OrientationProperty, Orientation.Horizontal);
fact.SetValue(ScrollViewer.HorizontalScrollBarVisibilityProperty, ScrollBarVisibility.Hidden);
var binding = new Binding() {
RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(ScrollContentPresenter), 1),
Path = new PropertyPath("(FrameworkElement.ActualWidth)")
};
fact.SetBinding(WrapPanel.WidthProperty, binding);
panelTemplate.VisualTree = fact;
lbDevices.ItemsPanel = panelTemplate;
GridViewColumn c1 = new GridViewColumn();
c1.CellTemplate = (DataTemplate)FindResource("DeviceDisplayer");
lbDevices.View = gv;
一些笔记。我没有像在Xaml中那样尝试重新创建DataTemplate,而是将其粘贴在Xaml中的UserControl.Resources
标签中。然后我使用FindResource来设置CellTemplate。
所以这是我的问题。当我执行上述操作时,布局最终看起来像这样:
注意非常小的橙色圆点......其中大约有十几个是可见的,因为选择一个项目会突出显示橙色边框。出于同样的原因,每个列表项都很小。问题是 - 如何使其“正常”?
答案 0 :(得分:0)
不是您正在寻找的答案,但我使用带有WrapPanel的ItemsControl作为ItemPanelTemplate,并使用ItemTemplateSelector根据类型设置每个项目的样式,而不是手动将项目添加到ListView。你可以使用WrapPanel来获得相同的外观,但我猜你希望它具有灵活性。
答案 1 :(得分:0)
我从未弄清楚为什么我的代码与XAML不匹配。相反,我最终使用XAML,然后只创建一个对View的引用,以便以后再使用。