Wpf ItemsControl不创建ContentPresenter
为什么“我的项目”控件不为每个项目创建ContentPresenter?我猜这就是为什么我的项目不显示的原因(当我使用实时视觉树进行检查时,它们被设置为可见并且位于正确的位置)。我基本上是在重用上面在另一个ItemsControl中运行的代码,在搜索Google/Stackoverflow时,我没有找到任何关于这个问题的东西。我可以包含视图模型代码,但我不认为这是相关的,因为我在Live Property Explorer中看到了相应的值,并且可以看到每个WellContainer都位于相应的网格单元中 XAML:Wpf ItemsControl不创建ContentPresenter,wpf,c#-4.0,mvvm,Wpf,C# 4.0,Mvvm,为什么“我的项目”控件不为每个项目创建ContentPresenter?我猜这就是为什么我的项目不显示的原因(当我使用实时视觉树进行检查时,它们被设置为可见并且位于正确的位置)。我基本上是在重用上面在另一个ItemsControl中运行的代码,在搜索Google/Stackoverflow时,我没有找到任何关于这个问题的东西。我可以包含视图模型代码,但我不认为这是相关的,因为我在Live Property Explorer中看到了相应的值,并且可以看到每个WellContainer都位于相应的网
实时目视树木检查:
项目控件设计用于仅在必要时,即当项目不符合其自身容器的条件时,将项目包装在容器中。从您的评论中,我们发现
WellContainer
源自Control
,因此有资格成为自己的容器1,并且没有包装在ContentPresenter
中。不幸的是,无法直接控制此行为,但您可以将ItemsControl
子类化,并重写该方法以修改默认行为
1正如我们在
ItemsControl
中所看到的,对于UIElement
类型的项目来说,有资格成为自己的容器就足够了。在哪里定义了WellContainer
?您是否明确定义了一个ContentPresenter
?我的视图模型有一个ObservableCollection
的WellContainer
s,并且WellContainer
只是同一项目中继承自控件的一个类。不,我没有明确定义ContentPresenter
只是定义DataTemplate
,因为这是我在其他两个案例中所做的,这两个案例似乎都在附近工作。如果你的内容在那里,并且像你说的那样在正确的位置,检查Z-Index
,确保它不只是隐藏在有问题的网格上的某个ZIndex
后面,0与工作的两个网格相同,不应该有任何其他内容<代码>不透明度
为1,除网格从不显示/渲染外,所有属性看起来都很棒:(注意,在视图模型中有一组控件是个坏主意。您不能同时在多个ItemsControl中显示它们,因为一个UI元素只能有一个父元素,即不是多个父元素的子元素。好的,谢谢。我将尝试提出解决方案并更新问题。
<ItemsControl
Grid.Row="1"
Grid.Column="1"
ItemsSource="{Binding Wells}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid
x:Name="m_WellGrid"
Margin="5"
wpf:GridHelpers.RowCount="{Binding RowCount}"
wpf:GridHelpers.ColumnCount="{Binding ColumnCount}">
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter
Property="Grid.Row"
Value="{Binding Path=WellRow}"/>
<Setter
Property="Grid.Column"
Value="{Binding Path=WellCol}"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock
Text="A"
Margin="4"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>