为什么 WPF ListView 主题不起作用?
Why does no WPF ListView Theme work?
我不是平面设计师,但我想要一个漂亮的应用程序。我在 Internet 上搜索 WPF 主题,发现这些:
https://visualstudiogallery.msdn.microsoft.com/30e8b37d-01a0-4749-abcb-a5d7631e7646
这些主题适用于按钮和文本框以及许多控件,但不适用于 ListView。
这是我的示例 ListView 在没有主题的情况下的样子:
这就是主题 ShinyBlue 的外观(其他主题看起来相似):
我使用哪个主题并不重要(我下载了很多)。一直存在带主题的ListView不显示items的问题。它只显示一些粗线而不是项目。
这是代码:
<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/
当我创建一个带有列的 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>
并在code-behind中(当然这不是正确的做法,但这是最短的):
ListView1.ItemsSource = new[]
{
new { A = "qqq", B = "rrr" },
new { A = "qqqq", B = "rrr" }
};
我也让你的代码可以工作,但为此我更改了 BureauBlack.xaml
中的 ListViewItem
模板(正在使用的主题):
<GridViewRowPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="0,2,0,2" VerticalAlignment="Stretch" />
至
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="0,2,0,2" VerticalAlignment="Stretch" />
现在您的代码列表中的内容已显示。但是对于你想要做的事情,就像评论中建议的那样,你可能想要一个 ListBox
,而不是 ListView
。
我不是平面设计师,但我想要一个漂亮的应用程序。我在 Internet 上搜索 WPF 主题,发现这些:
https://visualstudiogallery.msdn.microsoft.com/30e8b37d-01a0-4749-abcb-a5d7631e7646
这些主题适用于按钮和文本框以及许多控件,但不适用于 ListView。
这是我的示例 ListView 在没有主题的情况下的样子:
这就是主题 ShinyBlue 的外观(其他主题看起来相似):
我使用哪个主题并不重要(我下载了很多)。一直存在带主题的ListView不显示items的问题。它只显示一些粗线而不是项目。
这是代码:
<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/
当我创建一个带有列的 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>
并在code-behind中(当然这不是正确的做法,但这是最短的):
ListView1.ItemsSource = new[]
{
new { A = "qqq", B = "rrr" },
new { A = "qqqq", B = "rrr" }
};
我也让你的代码可以工作,但为此我更改了 BureauBlack.xaml
中的 ListViewItem
模板(正在使用的主题):
<GridViewRowPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="0,2,0,2" VerticalAlignment="Stretch" />
至
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="0,2,0,2" VerticalAlignment="Stretch" />
现在您的代码列表中的内容已显示。但是对于你想要做的事情,就像评论中建议的那样,你可能想要一个 ListBox
,而不是 ListView
。