为什么没有WPF ListView主题工作?

时间:2015-01-24 07:55:43

标签: wpf xaml listview themes

我不是平面设计师,但我想要一个漂亮的应用程序。我在互联网上搜索了WPF主题,我发现了这些:
https://visualstudiogallery.msdn.microsoft.com/30e8b37d-01a0-4749-abcb-a5d7631e7646
主题适用于按钮和文本框以及许多控件,但不适用于ListView 这是我的示例ListView在没有主题的情况下的外观:
No Theme
这就是它与Theme ShinyBlue的外观(其他主题看起来相似):
With Theme
我使用哪个主题(我下载了很多)并不重要。始终存在ListView with Theme不显示项目的问题。它只显示一些粗线而不是项目 这是代码:

 <Window
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
            mc:Ignorable="d" x:Class="SahaWpfTheme20131.TestWindow1"
            Title="Test Window" Width="250" Height="200"
            >
            <Grid>
                 <ListView  x:Name="ListView1" HorizontalAlignment="Left"  
                        VerticalAlignment="Top" Width="200" Height="150">
                    <ListViewItem Content="Coffee"/>
                    <ListViewItem Content="Tea"/>
                    <ListViewItem Content="Orange Juice"/>
                    <ListViewItem Content="Milk"/>
                    <ListViewItem Content="Iced Tea"/>
                    <ListViewItem Content="Mango Shake"/>
                </ListView>
            </Grid>
        </Window>

我做错了什么或做了很多主题不适用于ListView?我很困惑,为什么这不起作用。

我在这里使用了ListView示例:http://www.c-sharpcorner.com/uploadfile/mahesh/listview-in-wpf/

1 个答案:

答案 0 :(得分:2)

当我使用列和ListView创建ItemsSource时,它可以正常工作(但颜色混乱,可能是另一个问题):

    <ListView  x:Name="ListView1" HorizontalAlignment="Left"  
                    VerticalAlignment="Top" Width="200" Height="150">
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn DisplayMemberBinding="{Binding A}" />
                    <GridViewColumn DisplayMemberBinding="{Binding B}" />
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>

在代码隐藏中(当然这不是正确的方法,但它是最短的):

        ListView1.ItemsSource = new[]
        {
            new { A = "qqq", B = "rrr" },
            new { A = "qqqq", B = "rrr" }
        };

enter image description here

我也让您的代码正常工作,但为此我更改了ListViewItem中的BureauBlack.xaml模板(正在使用的主题):

<GridViewRowPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="0,2,0,2" VerticalAlignment="Stretch" />

<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="0,2,0,2" VerticalAlignment="Stretch" />

现在显示代码列表中的内容。但是对于您尝试做的事情,如评论中建议的那样,您可能需要ListBox,而不是ListView