为什么 ListView 项目模板显示按钮但没有文本?

Why does ListView Item Template show buttons but with no text?

我有一个 WPF 应用程序 XAML...

<ListView
    ScrollViewer.HorizontalScrollBarVisibility="Hidden"
    ScrollViewer.VerticalScrollBarVisibility="Hidden"
    ItemsSource="{Binding HTMLControlNames}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Button  Content="{Binding Name}"></Button>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

绑定正确,ObservableCollection 属性 中有实现 INPC 的数据。

我添加了同样有效的 Expression Dark Theme,但这是上面标记的输出:

按钮在那里,只是没有显示文本...顺便说一句,按钮的数量等于集合中项目的数量。

这是 ViewModel 中的 属性,单步显示集合中有项目(正确的项目)。

    public ObservableCollection<ControlName> HTMLControlNames
    {
        get { return _HTMLControlNames; }
        set
        {
            _HTMLControlNames = value;
            PropChanged("HTMLControlNames");
        }
    }

最后是控件名称 Class:

public class ControlName
{
    public string Name { get; set; }
}

如果我不使用 ExpressionDark.xaml 内容就会出现!

这里有更多信息:控件的顶部显示正常... 如果我不使用 DataTemplate 作为此控件的上半部分,按钮就可以了。

这是默认的控件模板(只是一个带有内容展示器的网格)..

你看到的你认为ListView控件中的一个按钮,实际上是header区域。您可以通过向 header:

添加列来更清楚地看到这一点
<ListView.View>
    <GridView>
        <GridViewColumn Header="Test" />
    </GridView>
</ListView.View>

列表视图项实际上是 header 下面的细 lighter-grey 条带。

我在模板化列表视图方面没有太多经验(我通常使用列表框),但在您使用的主题中,列表视图似乎以这样一种方式模板化,它基本上忽略了项目模板.你可以通过使用像这样的愚蠢模板来看到它:

<ListView.ItemTemplate>
    <DataTemplate>
        <Rectangle Fill="Orange" Width="20" Height="20" />
    </DataTemplate>
</ListView.ItemTemplate>

您会看到列表视图中没有橙色矩形出现,即使您绑定的 collection 中包含元素也是如此。

我不太确定如何解决这个问题。也许有更多模板列表视图控件经验的人可以插话。

感谢斯蒂芬,这是目前的解决方案:

<ListView.View>
        <GridView>
            <GridViewColumn x:Name="xHtmlControlcol"
                        Header="Filter For:"
                        Width="{Binding ActualWidth,
                        ElementName=XListView, 
                        Mode=OneWay}">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <Button  Content="{Binding Name}"
                                 Width="{Binding ActualWidth,
                                 ElementName =XListView,
                            Mode=OneWay}" BorderThickness="1,0" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>

它产生了这个:请注意,左边距还有一个小问题,我现在不知道如何解决。

使用数据绑定时的诀窍是:

  • 使用 ItemsSource 绑定到 ListView 的集合
  • 使用如上所示的ListView.View设置一个GridViewColumn。
  • 使用GridViewColumn.CellTemplate注入你想要的控件类型。
  • 确保注入的控件绑定到正确的内容路径名。