Org*_*ey 10 wpf xaml headereditemscontrol
我认为我有一个非常简单的目标,但似乎无法实现.
我想要实现的是拥有一个带有标题的ItemsControl(因为我不希望列表的选择功能).优选地是静态头部.
目前我正在使用网格作为标题,然后将该网格复制到ItemsControl的ItemTemplate(DataTemple)中,然后将它们一个放在网格中.它有点工作,但它并不总是很好地排队等.
然后我找到了HeaderedItemsControl,我认为这是一个绝妙的主意,但不能让它工作,它根本不显示标题.我试过以下几点;
我在Blend的一个小项目中完成了这一切,然后将它移到生产应用程序中,我只是使用了我创建的简单示例数据源.
我可能完全错过了这艘船,但任何帮助将不胜感激.
我目前的代码如下,首先是我的HeaderedItemsControl
<HeaderedItemsControl Header="HeaderedItemsControl"
ItemsSource="{Binding Collection, Mode=Default}"
ItemTemplate="{DynamicResource ItemsControlDataTemplate}"
HeaderTemplate="{DynamicResource ItemsControlHeaderDataTemplate}"/>
Run Code Online (Sandbox Code Playgroud)
然后我有一个按预期工作的ItemTemple
<DataTemplate x:Key="ItemsControlDataTemplate">
<Grid d:DesignWidth="268">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.754*"/>
<ColumnDefinition Width="0.246*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Property1, Mode=Default}" TextWrapping="Wrap" d:LayoutOverrides="Height" HorizontalAlignment="Stretch" Margin="0" />
<TextBlock Text="{Binding Property2, Mode=Default}" TextWrapping="Wrap" d:LayoutOverrides="Height" Grid.Column="1" HorizontalAlignment="Left" Margin="0" />
</Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
然后是反对其职业道德的标题,我已经尝试使用绑定和TextBlock.Text属性中的纯文本
<DataTemplate x:Key="ItemsControlHeaderDataTemplate">
<Grid d:DesignWidth="268">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.754*"/>
<ColumnDefinition Width="0.246*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Header.Header1, Mode=Default, Source={StaticResource SampleDataSource6}}" TextWrapping="Wrap" HorizontalAlignment="Stretch" Margin="0"/>
<TextBlock Text="{Binding Header.Header2, Mode=Default, Source={StaticResource SampleDataSource6}}" TextWrapping="Wrap" d:LayoutOverrides="Height" Grid.Column="1" HorizontalAlignment="Left" Margin="0"/>
</Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
HeaderedItemsControl没有默认样式,因此它只使用基本ItemsControl类中的模板,该模板不呈现任何标题.它仅被框架用作MenuItem,ToolBar和TreeViewItem的基类,它们定义了自己的模板.您可以创建自己的模板,其中包含标题的ContentPresenter:
<HeaderedItemsControl ItemsSource="{Binding}" Header="Some text">
<HeaderedItemsControl.Template>
<ControlTemplate TargetType="HeaderedItemsControl">
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
<DockPanel>
<ContentPresenter DockPanel.Dock="Top" ContentSource="Header" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</DockPanel>
</Border>
</ControlTemplate>
</HeaderedItemsControl.Template>
</HeaderedItemsControl>
Run Code Online (Sandbox Code Playgroud)
如果您只在一个地方使用它,则可能更容易使用普通的ItemsControl并将标头直接包含在控件模板中.
此外,看起来您正在尝试使用两个网格具有相同宽度的网格.您可能希望查看WPF中的网格大小共享.如果在父控件上设置Grid.IsSharedSizeScope,则可以在不同网格的列上设置SharedSizeGroup以赋予它们相同的宽度.
归档时间: |
|
查看次数: |
12986 次 |
最近记录: |