我有一个继承自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>
以下是发生的事情:
我可以通过显式声明样式(Style="{StaticResource {x:Type local:TestListView}}"
)或者样式是否与控件在同一文件中定义(不在Generic.xaml或其他资源字典中)来获得预期结果。
任何人都可以帮助我理解为什么会这样吗?