使用主题时数据模板不起作用 - WPF

时间:2010-04-07 14:00:37

标签: c# wpf themes datatemplate

我正在使用WPF Futures中的主题DarkExpression。 它似乎不适用于datatemplates。

情景1:

以下是没有datatemplates的情况:

enter image description here

代码:

<ListView Name="playlistListView"  ItemsSource="{Binding PlaylistList}" Margin="0" SelectionChanged="DatabindedPlaylistListView_SelectionChanged" Background="{x:Null}" Opacity="0.98">
        <ListView.View>
            <GridView>
                <GridViewColumn Width="Auto" DisplayMemberBinding="{Binding Name}">
                    <GridViewColumnHeader HorizontalContentAlignment="Left" Content="Playlist" Tag="Playlist"/>
                </GridViewColumn>
            </GridView>
        </ListView.View>
</ListView>

场景2: 以下是在使用主题时尝试使用datatemplates的方式:

enter image description here

代码:

        <ListView Name="playlistListView"  ItemsSource="{Binding PlaylistList}" Margin="0" SelectionChanged="DatabindedPlaylistListView_SelectionChanged" Background="{x:Null}" Opacity="0.98">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <UserControls:SongDataTemplate Margin="4" />
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
</ListView>

场景3:

以下是在覆盖主题时尝试使用datatemplates的方式:

enter image description here

代码:

<UserControl.Resources>
    <Style x:Key="ListViewItemStretch" TargetType="{x:Type ListViewItem}">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        <Setter Property="Background" Value="Transparent" />
    </Style>
</UserControl.Resources>

<Grid x:Name="LayoutRoot">
    <ListView Name="playlistListView" ItemContainerStyle="{StaticResource ListViewItemStretch}" ItemsSource="{Binding PlaylistList}" Margin="0" SelectionChanged="DatabindedPlaylistListView_SelectionChanged" Background="{x:Null}" Opacity="0.98">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <UserControls:SongDataTemplate Margin="4" />
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
</ListView>

我想保留主题样式,但我也想使用datatemplates来定义播放列表的外观。有什么建议吗?

注意:在方案2和3中,我必须删除

<ListView.View>
        <GridView>
            <GridViewColumn Width="Auto" DisplayMemberBinding="{Binding Name}">
                <GridViewColumnHeader HorizontalContentAlignment="Left" Content="Playlist" Tag="Playlist"/>
            </GridViewColumn>
        </GridView>
</ListView.View>

在使用datatemplate之前。

修改

下面给出的解决方案,如果类型更改为ListBox并且我使用的是TextBox,则可以使用。但是我无法使用ListView。

3 个答案:

答案 0 :(得分:2)

你做错了。 如果要自定义ListView,则需要使用ViewBase类型的View属性。从ViewBase派生自定义视图,将其分配给ListView.View,您就完成了。 ViewBase Class Documentation

中有一个例子

答案 1 :(得分:1)

尝试使用BasedOn

<Style BasedOn={StaticResource {x:Type ListViewItem}} x:Key="ListViewItemStretch" TargetType="{x:Type ListViewItem}"> 
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
    <Setter Property="Background" Value="Transparent" /> 
</Style>

答案 2 :(得分:0)

如果替换

,它是否有效
<Grid>
   <UserControls:SongDataTemplate Margin="4" />
</Grid>

使用TextBox,例如?

问题可能由您的用户控件生成..