首页 > 解决方案 > 从扩展的 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;
            }
        }

标签: c#wpfwpf-style

解决方案


推荐阅读