从扩展的 ListView 覆盖 ContextMenu 样式

问题描述

因此,在为已经出现的现有平台构建 UserControl 时会出现此问题。在这种情况下,当涉及到 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 似乎继承了一些不需要的样式行为,例如不显示鼠标悬停标记和颜色。

场景一: 是否可以从它自己的扩展 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;
            }
        }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)