Wpf Prism 为 ItemControl 的每个项目赋予样式(区域中的视图)
Wpf Prism give style to each items of a ItemControl (Views in a Region)
我有一个 WPF
Prism
项目,它有一个 Region
基于 ItemControl
:
<ItemsControl prism:RegionManager.RegionName="WorkspaceRegion" >
在这个 ItemControl
中,我看到我的一些 Views
垂直度很好,但我想给 ItemControl
的每个 Item
一个样式(每个 View
).
All of items (views) must have same style (for example: background
color, padding, margin, border and...)
我想要这样的东西(例如):
我使用了这样一个简单的样式和代码:
<ItemsControl prism:RegionManager.RegionName="WorkspaceRegion" Background="#765e4d" Margin="10">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Border BorderBrush="Red" Padding="10" BorderThickness="1" CornerRadius="5">
<ContentPresenter Content="{Binding}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
它的错误:
A style intended for type 'ItemsControl' cannot be applied to type
'View1'
我也测试了这段代码:
<ItemsControl prism:RegionManager.RegionName="WorkspaceRegion" Background="#765e4d" Margin="10">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid >
<TextBlock Text="Test"/>
<Border BorderBrush="Red" Padding="10" Margin="10" BorderThickness="1" CornerRadius="5">
<ContentPresenter Content="{Binding}"/>
</Border>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
但是结果就像我写的那样:
<ItemsControl prism:RegionManager.RegionName="WorkspaceRegion" >
为什么?我的错误是什么?
我该怎么做?
编辑1:
我用了 <ItemsPresenter/>
而不是 <ContentPresenter Content="{Binding}"/>
结果:没有任何变化
编辑2:
我为 ItemsControl 的 ItemContainerStyle 属性 编写了这种样式并且它有效 if 我从中删除了 ControlTemplate
部分。
现在的问题是我应该在下面的 ControlTemplate
中使用哪种 Presenter
或 Xaml Tag
我的 Views
(UserControls
) 显示。
<Style TargetType="{x:Type UserControl}" x:Key="MyItemContainerStyle">
<Setter Property="Background" Value="Brown"/>
<Setter Property="BorderBrush" Value="Blue"/>
<Setter Property="BorderThickness" Value="2"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate>
??????????????????????????
<!-- The following ContentPresenter not working and the Items dose not show -->
<ContentPresenter/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这在我的测试应用程序中对我有用:
<ItemsControl Background="#FF85664F" prism:RegionManager.RegionName="WorkspaceRegion">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="DarkGray" Padding="10"
Margin="5, 5, 5, 0" BorderThickness="1"
CornerRadius="5" Background="#FFC3BF8F">
<ContentPresenter Content="{Binding}" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
<system:String>ItemsControl Item #1</system:String>
<system:String>ItemsControl Item #2</system:String>
<system:String>ItemsControl Item #3</system:String>
<system:String>ItemsControl Item #4</system:String>
<system:String>ItemsControl Item #5</system:String>
</ItemsControl>
设置样式的ContentTemplate
属性,不是Control.Template
或Template
ItemsControl 的呈现方式如下:
<ItemsControl>
<ItemsPanel>
<ContentPresenter>
<ItemTemplate>
</ContentPresenter>
<ContentPresenter>
<ItemTemplate>
</ContentPresenter>
<ContentPresenter>
<ItemTemplate>
</ContentPresenter>
</ItemsPanel>
</ItemsControl>
ItemContainerStyle
适用于包装此 XAML 树中每个项目的 ContentPresenter
对象,我不相信 ContentPresenter
有 Control.Template
或 Template
属性。
更改 ContentPresenter
的显示方式时,您应该改写 ContentTemplate
属性。
我有一个 WPF
Prism
项目,它有一个 Region
基于 ItemControl
:
<ItemsControl prism:RegionManager.RegionName="WorkspaceRegion" >
在这个 ItemControl
中,我看到我的一些 Views
垂直度很好,但我想给 ItemControl
的每个 Item
一个样式(每个 View
).
All of items (views) must have same style (for example: background color, padding, margin, border and...)
我想要这样的东西(例如):
我使用了这样一个简单的样式和代码:
<ItemsControl prism:RegionManager.RegionName="WorkspaceRegion" Background="#765e4d" Margin="10">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Border BorderBrush="Red" Padding="10" BorderThickness="1" CornerRadius="5">
<ContentPresenter Content="{Binding}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
它的错误:
A style intended for type 'ItemsControl' cannot be applied to type 'View1'
我也测试了这段代码:
<ItemsControl prism:RegionManager.RegionName="WorkspaceRegion" Background="#765e4d" Margin="10">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid >
<TextBlock Text="Test"/>
<Border BorderBrush="Red" Padding="10" Margin="10" BorderThickness="1" CornerRadius="5">
<ContentPresenter Content="{Binding}"/>
</Border>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
但是结果就像我写的那样:
<ItemsControl prism:RegionManager.RegionName="WorkspaceRegion" >
为什么?我的错误是什么?
我该怎么做?
编辑1:
我用了 <ItemsPresenter/>
而不是 <ContentPresenter Content="{Binding}"/>
结果:没有任何变化
编辑2:
我为 ItemsControl 的 ItemContainerStyle 属性 编写了这种样式并且它有效 if 我从中删除了 ControlTemplate
部分。
现在的问题是我应该在下面的 ControlTemplate
中使用哪种 Presenter
或 Xaml Tag
我的 Views
(UserControls
) 显示。
<Style TargetType="{x:Type UserControl}" x:Key="MyItemContainerStyle">
<Setter Property="Background" Value="Brown"/>
<Setter Property="BorderBrush" Value="Blue"/>
<Setter Property="BorderThickness" Value="2"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate>
??????????????????????????
<!-- The following ContentPresenter not working and the Items dose not show -->
<ContentPresenter/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这在我的测试应用程序中对我有用:
<ItemsControl Background="#FF85664F" prism:RegionManager.RegionName="WorkspaceRegion">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="DarkGray" Padding="10"
Margin="5, 5, 5, 0" BorderThickness="1"
CornerRadius="5" Background="#FFC3BF8F">
<ContentPresenter Content="{Binding}" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
<system:String>ItemsControl Item #1</system:String>
<system:String>ItemsControl Item #2</system:String>
<system:String>ItemsControl Item #3</system:String>
<system:String>ItemsControl Item #4</system:String>
<system:String>ItemsControl Item #5</system:String>
</ItemsControl>
设置样式的ContentTemplate
属性,不是Control.Template
或Template
ItemsControl 的呈现方式如下:
<ItemsControl>
<ItemsPanel>
<ContentPresenter>
<ItemTemplate>
</ContentPresenter>
<ContentPresenter>
<ItemTemplate>
</ContentPresenter>
<ContentPresenter>
<ItemTemplate>
</ContentPresenter>
</ItemsPanel>
</ItemsControl>
ItemContainerStyle
适用于包装此 XAML 树中每个项目的 ContentPresenter
对象,我不相信 ContentPresenter
有 Control.Template
或 Template
属性。
更改 ContentPresenter
的显示方式时,您应该改写 ContentTemplate
属性。