c# - 从扩展的 ListView 覆盖 ContextMenu 样式
问题描述
因此,在为已经出现的已经存在的平台构建用户控件时会出现这个问题。在这种情况下,当涉及到 ContextMenu:s 时,为该应用程序构建的控件似乎继承了一些不需要的样式。
无论如何,我有一个类似下面这样的扩展 ListView 控制器,因为我需要一些额外的功能。
using System.Windows.Controls;
namespace UI_Designs
{
public partial class ExtListView : ListView
{
public ExtListView()
{
InitializeComponent();
}
}
...
}
<ListView x:Class="UI_Designs.ExtListView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
...
</Grid>
</ListView>
然后,在 UserControl 中使用这个扩展的 ListView,像这样并向它添加一个 ContextMenu。这是它开始的地方。
<UserControl x:Class="UI_Designs.TestControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:UI_Designs"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<local:ExtListView>
<local:ExtListView.View>
<GridView>
<GridViewColumn Header="Test"/>
</GridView>
</local:ExtListView.View>
<local:ExtListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="ContextMenu" Value="{Binding ContextMenu}"/>
</Style>
</local:ExtListView.ItemContainerStyle>
</local:ExtListView>
</Grid>
</UserControl>
通过这样做,ContextMenu 似乎继承了一些不需要的样式行为,例如不显示鼠标悬停标记和颜色。
场景 1:是否可以从其自身的扩展 ListView 类中设置或覆盖关联 ContextMenu 的样式?因为我几乎知道我想要和不想要什么样的造型。每次我想为这种扩展 ListView 的特殊类型提供任何类型的 ContextMenu 时,都不必重做所有这些样式。
场景 2:或者拥有 ContextMenu 的扩展版本来控制样式是更好的选择?
我曾尝试使用 Loaded 事件来查找并设置它,但不确定这是一种方法,因为注意到这种方式似乎发生了很多事情。
private void ExtListView_Loaded(object sender, RoutedEventArgs e)
{
gridView = View as GridView;
if (gridView != null)
{
Style style = this.FindResource(typeof(ContextMenu)) as Style;
style = Resources["TestContextMenu"] as Style;
}
}
解决方案
推荐阅读
- header-bidding - 使用 Prebid.js 实现标头出价需要多少实际编码?
- ruby-on-rails - 如何在 Rails 中使用 RestClient 发送 graphql 请求
- r - 如何在 geom_bar() 中使用多个位置参数
- vb.net - 在同一数据集合上执行嵌套循环的最快方法
- java - 我想使用eclipse构建android应用程序。但是遇到这些错误,如何解决?
- regex - 使用正则表达式验证不同类型名称的名称
- elasticsearch - 如何将 FSCrawler REST 与 docker-compose 连接起来
- android - Android 工作室 - 颤振:没有连接的设备
- c# - 拖放背景颜色
- php - 致命错误:未捕获的错误:找不到类“PHPMailer”