为什么设置ListView.View会吹走我的自定义ControlTemplate?

时间:2014-01-22 19:24:24

标签: wpf listview controltemplate

我有一个继承自ListView的自定义控件。我为它定义了一个自定义模板,它按照预期的方式工作。但是,当我为列表视图定义视图时,似乎不会应用自定义模板。

这就是我正在做的事情:

我的控制:

public class TestListView : ListView
{
    static TestListView()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(TestListView), new FrameworkPropertyMetadata(typeof(TestListView)));
    }

    public TestListView() : base(){}
}

我的自定义模板:

<Style x:Key="{x:Type local:TestListView}" TargetType="{x:Type local:TestListView}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListView">
                <DockPanel>
                    <TextBlock Text="foo!" DockPanel.Dock="Top"/>
                    <ScrollViewer x:Name="PART_ContentScrollViewer" Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}">
                        <ItemsPresenter />
                    </ScrollViewer>
                </DockPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

我的XAML:

<StackPanel>
    <GroupBox Header="With View">
        <local:TestListView>
            <ListViewItem>One</ListViewItem>
            <ListViewItem>Two</ListViewItem>
            <ListViewItem>Three</ListViewItem>
            <local:TestListView.View>
                <GridView>
                    <GridViewColumn Header="MyColumn" />
                </GridView>
            </local:TestListView.View>
        </local:TestListView>
    </GroupBox>

    <GroupBox Header="With No View">
        <local:TestListView>
            <ListViewItem>One</ListViewItem>
            <ListViewItem>Two</ListViewItem>
            <ListViewItem>Three</ListViewItem>
        </local:TestListView>
    </GroupBox>
</StackPanel>

以下是发生的事情: Results

我可以通过显式声明样式(Style="{StaticResource {x:Type local:TestListView}}")或者样式是否与控件在同一文件中定义(不在Generic.xaml或其他资源字典中)来获得预期结果。

任何人都可以帮助我理解为什么会这样吗?

0 个答案:

没有答案