开发人员技术 | .NET | 其他
基于 .NET 软件框架的 Microsoft 技术。 不属于特定类别的其他主题。
我正在使用 .NET-10.0.100-rc.1.25451.107 预览版。我的 OS 是 Windows10 22H2。
我注意到 .NET 10 预览版中加入了 GridView。我使用如下代码来创建一个带 GridView 的 ListView:
<ListView ItemsSource="{Binding DisplayItems}" FontSize="13" Background="{StaticResource BgLight}" Margin="0 10 0 10"
SelectionChanged="ListView_SelectionChanged" x:Name="ListView">
<ListView.View>
<GridView>
<GridViewColumn Header="名称" Width="150">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock TextTrimming="CharacterEllipsis" Text="{Binding ItemName}" ToolTip="{Binding ItemName}"
ToolTipService.InitialShowDelay="300"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
<GridViewColumn Header="状态" Width="150">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock TextTrimming="CharacterEllipsis" Text="{Binding State}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
此代码可以正常运行,绑定也运行良好。现在我尝试在 <ListView> 中插入以下代码,以为 GridView 的每一行添加一个 ContentMenu:
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="ContextMenu" Value="{StaticResource ContextMenu}"/>
</Style>
</ListView.ItemContainerStyle>
我的 ContentMenu 定义如下:
<Window.Resources>
<ContextMenu x:Key="ContextMenu">
<MenuItem x:Name="MenuRemove" Click="MenuRemove_Click">
<MenuItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock FontFamily="{StaticResource SymbolThemeFontFamily}"
Text="" VerticalAlignment="Center" Margin="0 0 10 0"/>
<TextBlock Text="移除"/>
</StackPanel>
</MenuItem.Header>
</MenuItem>
</ContextMenu>
</Window.Resources>
我发现当我设置了 ItemContainerStyle 后,GridView 失去了原有的 Fluent 样式。
我尝试过把 <Style> 一行改为:
<Style TargetType="ListViewItem" BasedOn="{StaticResource {x:Type ListViewItem}}">
应用了这段代码之后,我的 ListView 恢复了 Fluent 样式,但是列表中的数据绑定似乎损坏了。现在表中每行只能显示 MyApp.ViewModel.DisplayItem,这是我用于绑定 ListView 的 ViewModel 类名。而且这个只显示一列。我有点怀疑是不是破坏了 GridView。
请问我的操作何处出现了错误?有设置 ContentMenu 而不破坏 Fluent 样式的方法吗?