我一直在尝试创建自定义菜单。出于这个原因,我想使用ItemsControl以使其灵活。经过几个小时的头痛,我想出了如何制作它 - 有点。
我有自定义的ItemsControl" LiftMenu" (这还不是很多自定义但标准的)和一个名为" LiftItem"的UserControl。最后但并非最不重要的是,我得到了Model-class" LiftMenuItem"。
通过向LiftMenu添加新的LiftMenuItem,它应该将新的LiftItem控件显示为相应的项目。到目前为止一切顺利,我设法让这个工作。
在那个LiftItem控件中,我像在普通的DataTemplate中一样绑定:与路径的普通绑定,仅此而已。通常这可以正常工作,因为DataTemplate已经将它的上下文设置为模型类型。
但是现在我得到一个空的控件,什么都不做,什么都不显示,因为绑定不起作用。
我是这样实现的:
<menu:LiftMenu HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MinHeight="200" Background="#80A8A8A8" Margin="5,0,0,0">
<menu:LiftMenu.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</menu:LiftMenu.ItemsPanel>
<menu:LiftMenu.ItemTemplate>
<DataTemplate DataType="{x:Type menu:LiftMenuItem}">
<menu:LiftItem />
</DataTemplate>
</menu:LiftMenu.ItemTemplate>
<menu:LiftMenuItem Header="Test1"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border x:Name="border" BorderBrush="{Binding LabelColor}" BorderThickness="1" HorizontalAlignment="Left" Height="Auto" Margin="0"
VerticalAlignment="Stretch" Width="4" Background="{Binding BorderBrush, ElementName=border}"/>
<TextBlock Text="{Binding Header}" TextTrimming="CharacterEllipsis" Margin="5,0,5,0" HorizontalAlignment="Left" VerticalAlignment="Center"
Foreground="White" />
<controls:ProgressRing x:Name="ring" Grid.Column="2" HorizontalAlignment="Right" Stroke="#ffff8000" VerticalAlignment="Center"
Minimum="0" Maximum="100" Value="{Binding ProcessValue}" IsIndeterminate="{Binding ProcessIndeterminate}" Visibility="{Binding ProcessVisibility}"
Width="20" Height="20" Radius="10" Margin="2,0,2,0" />
</Grid>
最后没有文字,没有边框。只有ProgressRing可见。
我该如何解决这个问题?这个ListItem控件应该与按钮类似,因此我需要做一些样式(动画,......)。我无法在普通的DataTemplate中执行此操作,但我不想错过WPF的绑定功能。这会使它相对不灵活。
问题是什么?我可能只是错过了一些DataContext,但我不知道它会是什么。