【发布时间】:2012-04-30 21:16:32
【问题描述】:
我尝试在代码中重新创建一些 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。
所以这是我的问题。当我执行上述操作时,布局最终看起来像这样:
请注意非常小的橙色圆点...大约有十几个是可见的,因为选择一个项目以橙色边框突出显示它。出于同样的原因,每个列表项都很小。问题是 - 我如何让它“正常”大小?
【问题讨论】: