样式无法使用自定义ListView

时间:2015-10-12 08:59:06

标签: wpf xaml custom-controls

我有一个装配,我用他们自己的风格定义了几个海关控制(基于现有的控制)。

对于所有这些我定义静态构造函数,我在其中设置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)));
    }
}

在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" />

我没有警告,我的风格设置正确。

1 个答案:

答案 0 :(得分:1)

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

pom.xml

如果有人能告诉我为什么我必须为我的自定义ListView控件做这个技巧,我很乐意知道。