我一直在努力使它起作用。
我不认为这是重复的,因为我发现没有其他帖子有此问题或帮助我解决了我的问题,但是如果重复,我表示歉意。
我有一个从另一个UserControl继承的UserControl。这个孩子需要显示我的其他孩子不存在或不需要的物品清单。
C#:
public partial class EntitlementUserControl : BaseUserControl
{
public ObservableCollection<Entitlement> EntitlementCollection { get; set; } = new ObservableCollection<Entitlement>();
public EntitlementUserControl()
{
InitializeComponent();
this.DataContext = this;
EntitlementCollection.Add(new Entitlement("Test"));
}
}
此处的EntitlementID应该显示在构造函数中输入的“测试”。
WPF:
<ListView x:Name="entitlementList" ItemsSource="{Binding EntitlementCollection}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="5" HorizontalAlignment="Stretch"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=EntitlementID}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这对我不起作用,我发现this解释了我需要DataContext,但是即使使用它,它也无法正确显示我的值。一个项目显示在ListView中,但为空,不包含任何文本,如下图所示。黑色是我的样式资源,因为选择它来显示已创建一项。
但是,如果我将XAML更改为在列表视图中具有Gridview,它将显示我的数据,但是我的目标是格式化数据,而不是显示网格。
在Gridview中使用Xaml:
<ListView x:Name="entitlementList" ItemsSource="{Binding EntitlementCollection}" >
<ListView.View>
<GridView>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding EntitlementID}"/>
</GridView>
</ListView.View>
</ListView>
如您所见,这在ID列中正确显示了“测试”。但是,我希望能够显示不带任何列的列表,并能够应用所需的格式。任何想法为何第一种方法行不通?
权利只是一小类,包含ID和产品列表。 权利:
public class Entitlement
{
List<Product> products;
public List<Product> Products { get => products; set => products = value; }
public string EntitlementID { get => entitlementID; set => entitlementID = value; }
string entitlementID;
public void AddProduct(Product product)
{
Products.Add(product);
}
public Entitlement(string entitlementID)
{
products = new List<Product>();
this.entitlementID = entitlementID;
}
public override string ToString()
{
return EntitlementID;
}
}
如果您需要更多代码,请告诉我。
用于ListView的样式(不是我提供的,而是由我提供的):
<Style TargetType="{x:Type ListViewItem}" >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Border BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" CornerRadius="2"
SnapsToDevicePixels="true">
<Border x:Name="InnerBorder" CornerRadius="1" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition MinHeight="18"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Rectangle x:Name="UpperHighlight" Visibility="Collapsed" Fill="{StaticResource UpperReflection_Normal_BackgroundBrush}"/>
<GridViewRowPresenter Grid.RowSpan="2" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Grid>
</Border>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" Value="{StaticResource FlatButton_MouseOver_BackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource FlatButton_MouseOver_BorderBrush}"/>
<Setter Property="BorderBrush" TargetName="InnerBorder" Value="{StaticResource FlatButton_MouseOver_InnerBorderBrush}" />
<Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible"/>
</Trigger>
<!--<Trigger Property="Helpers:ItemDragState.IsUnderDragCursor" Value="True">
<Setter Property="Background" Value="{StaticResource ListViewItem_Hover_BackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource ListViewItem_Hover_BorderBrush}"/>
<Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible"/>
</Trigger>-->
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" Value="{StaticResource ListItemSelectedFill_BackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource ListItemSelectedFill_BorderBrush}"/>
<Setter Property="Foreground" Value="White" />
<Setter TargetName="InnerBorder" Property="BorderBrush" Value="{StaticResource ListViewItem_Selected_InnerBorderBrush}"/>
<Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible"/>
<Setter TargetName="UpperHighlight" Property="Fill" Value="#40FFFFFF"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true"/>
<Condition Property="Selector.IsSelectionActive" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="Background" Value="{StaticResource ListItemSelectedInactiveFill_BackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource ListItemSelectedInactiveFill_BorderBrush}"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true"/>
<Condition Property="IsMouseOver" Value="true"/>
</MultiTrigger.Conditions>
<Setter Property="Background" Value="{StaticResource ListItemSelectedHoverFill_BackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource ListItemSelectedHoverFill_BorderBrush}"/>
</MultiTrigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{StaticResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
答案 0 :(得分:0)
答案 1 :(得分:0)
您的ListViewItem
的样式使用GridViewRowPresenter
。没有GridView
,您的确不会在单元格中看到任何内容。
改为使用ContentPresenter
:
<ContentPresenter Grid.RowSpan="2"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>