我将编辑答案以使其稍后完成。目前我先分享一下方向。
实际上,您可以从 (Program Files)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\\Generic 文件夹中找到 generic.xaml
您将在其中看到带有 x:key="ListViewItemExpanded" 的 ListviewItem 样式,此文件将在以后使用。
在你的代码中说如果你有一个列表视图,你可以把上面的样式放在你的 itemcontainerstyle 中,比如:
<ListView SelectionMode="Multiple">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
<Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
<Setter Property="BorderBrush" Value="{x:Null}" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="{ThemeResource SystemControlForegroundBaseHighBrush}" />
<Setter Property="TabNavigation" Value="Local" />
<Setter Property="IsHoldingEnabled" Value="True" />
<Setter Property="Padding" Value="12,0,12,0" />
<Setter Property="HorizontalContentAlignment" Value="Left" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="MinWidth" Value="{ThemeResource ListViewItemMinWidth}" />
<Setter Property="MinHeight" Value="{ThemeResource ListViewItemMinHeight}" />
<Setter Property="AllowDrop" Value="False" />
<Setter Property="UseSystemFocusVisuals" Value="{StaticResource UseSystemFocusVisuals}" />
<Setter Property="FocusVisualMargin" Value="0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ComboBox Grid.Column="0">
<x:String>1</x:String>
<x:String>2</x:String>
</ComboBox>
<ContentPresenter Grid.Column="1"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
<x:String>1</x:String>
<x:String>2</x:String>
<x:String>3</x:String>
<x:String>4</x:String>
<x:String>5</x:String>
<x:String>6</x:String>
</ListView>
你会发现你只能看到你的内容,对吧?这里的实际问题与 MultiSelectSquare 有关,它是样式中的字体图标的边框,它控制此处复选框的行为。我们需要删除它并将combox放在那里。但它会导致异常,因为一些变换/动画的目标是这个边界。我们需要对其进行修改以使其正常工作。你可以先从这个方向开始。
我修改了上面的代码并在控件模板中添加了以下行:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ComboBox Grid.Column="0">
<x:String>1</x:String>
<x:String>2</x:String>
</ComboBox>
<ContentPresenter Grid.Column="1"/>
</Grid>
如您所见,如果添加此内容,您将看到内容和组合框。但是,正如我所提到的,如果我们只是这样做,我们会错过功能和动画,我们还需要根据默认样式修改视觉状态。
好的。所以现在你明白了关键点是什么。然后我们需要考虑默认模板,请从 generic.xaml 中搜索 ListViewItemExpanded 资源。注意称为“MultiSelectSquare”的边框吗?有四个与动画相关的东西:“MultiSelectSquare”“MultiSelectClipTransform”“MultiSelectCheckBoxTransform”“MultiSelectCheck”。一个简单的演示就像,将 FontIcon 替换为 Combobox,但保留 MultiSelectCheck 作为 Combobox 的名称。然后删除visualstategroup中关于MultiSelectCheck的任何动画。您会看到虽然它是一个显示的复选框,但当您单击它时,它实际上是弹出一个组合框。
但是对于复杂的演示,您必须为每个状态自己编写自己的动画。