Wpf 不使用自定义ListView的样式

Wpf 不使用自定义ListView的样式,wpf,xaml,custom-controls,Wpf,Xaml,Custom Controls,我有一个程序集,在其中定义了几个具有自己样式的自定义控件(基于现有控件) 对于所有这些,我定义了静态构造函数,在其中设置DefaultStyleKeyProperty并将样式XAML文件添加到Themes/Generic.XAML 除了我的自定义ListView之外,它对所有用户都正常工作。。这快把我逼疯了 以下是一个简短的示例: public class EmListView : ListView { /// <summary> /// Constructor

我有一个程序集,在其中定义了几个具有自己样式的自定义控件(基于现有控件)

对于所有这些,我定义了静态构造函数,在其中设置DefaultStyleKeyProperty并将样式XAML文件添加到Themes/Generic.XAML

除了我的自定义ListView之外,它对所有用户都正常工作。。这快把我逼疯了

以下是一个简短的示例:

public class EmListView : ListView
{
    /// <summary>
    /// Constructor
    /// </summary>
    static EmListView()
    {
        // Set the default style type
        DefaultStyleKeyProperty.OverrideMetadata(typeof(EmListView), new FrameworkPropertyMetadata(typeof(EmListView)));
    }
}
公共类EmListView:ListView { /// ///建造师 /// 静态EmListView() { //设置默认样式类型 DefaultStyleKeyProperty.OverrideMetadata(typeof(EmListView),new FrameworkPropertyMetadata(typeof(EmListView)); } } Generic.XAML中声明的XAML文件:

<Style TargetType="{x:Type ui:EmListView}">
    <Setter Property="SnapsToDevicePixels" Value="true"/>
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
    <Setter Property="ScrollViewer.CanContentScroll" Value="True"/>
    <Setter Property="VerticalContentAlignment" Value="Stretch"/>
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ui:EmListView}">

                <Border Name="Border" Style="{DynamicResource EMLV_ListViewBorderStyle}" Margin="50">
                    <ScrollViewer Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}">
                        <ItemsPresenter />
                    </ScrollViewer>
                </Border>

                <ControlTemplate.Triggers>
                    <Trigger Property="IsGrouping" Value="true">
                        <Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
                    </Trigger>

                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="Opacity" Value="0.3" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

我不知道为什么,但在EmListView上应用我的样式的唯一方法是在使用它时强制使用样式,如:

<ui:EmListView Margin="5" Style="{DynamicResource {x:Type ui:EmListView}}">

我有EmWindow,EmButton。。除该ListView外,其他所有视图都将自动应用样式。ListView有什么特别之处吗

多谢各位

编辑:

我发现了一些东西,似乎是我的EmListView声明引起了麻烦

以下是窗口内的示例声明:

                <ui:EmListView Margin="5">
                <ui:EmListView.View>
                    <GridView>

                        <ui:EmSortableGridViewColumn Width="100" DisplayMemberBinding="{Binding artCode, Mode=OneWay}" SortPropertyName="artCode" Header="Code" IsDefaultSortColumn="True" />

                        <ui:EmSortableGridViewColumn Width="100" DisplayMemberBinding="{Binding artCode, Mode=OneWay}" SortPropertyName="artCode" Header="Code" IsDefaultSortColumn="True" />

                        <ui:EmSortableGridViewColumn Width="100" DisplayMemberBinding="{Binding artCode, Mode=OneWay}" SortPropertyName="artCode" Header="Code" IsDefaultSortColumn="True" />

                        <ui:EmSortableGridViewColumn Width="100" DisplayMemberBinding="{Binding artCode, Mode=OneWay}" SortPropertyName="artCode" Header="Code" IsDefaultSortColumn="True" />

                    </GridView>
                </ui:EmListView.View>
            </ui:EmListView>

该样式不适用,它不断向我发出警告,表示它无法在样式中定义OverridesDefaultStyle属性

如果我只是这样声明:

<ui:EmListView Margin="5" />


我没有警告,我的样式设置正确。

我解决了我的问题,我在EmListView构造函数中做了一个糟糕的变通方法,如下所示:

    public EmListView()
    {
        Style defaultStyle = (Style)Application.Current.TryFindResource(typeof(EmListView));
        if (defaultStyle != null)
        {
            this.OverridesDefaultStyle = true;
            this.Style = defaultStyle;
        }
    }
如果有人能告诉我为什么我必须只为我的自定义ListView控件做这个把戏,我很乐意知道