我试图在代码中重新创建一些Xaml(WPF)。我觉得我很接近,但我有一个有点麻烦......这是我的XAML:以上在代码中重新创建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。
所以这是我的问题。当我做以上,布局最终看起来像这样:
通知很小的橙色点......还有他们的大约有十几个是可见的,只是因为选择一个项目有它凸显橙色边框。出于同样的原因,每个列表项目都很小。麻烦的是 - 我如何使它“正常”大小?