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

时间:2015-02-12 23:32:11

标签: c# wpf xaml

我有一个使用此XAML的WPF应用程序...

<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,它也可以使用,但这是上面标记的输出:

enter image description here

按钮在那里,他们只是没有显示文本... BTW按钮的数量等于集合中的项目数。

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

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

最后是ControlName类:

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

如果我不使用ExpressionDark.xaml,则会显示内容!

以下是更多信息:控件的顶部显示确定... 如果我不使用DataTemplate,就像在这个控件的上半部分那样按钮就可以了。

enter image description here

这是默认的控制模板(只是带有内容演示者的网格)..

enter image description here

2 个答案:

答案 0 :(得分:1)

您所看到的认为ListView控件中的按钮实际上是标题区域。通过在标题中添加列,您可以更清楚地看到这一点:

<ListView.View>
    <GridView>
        <GridViewColumn Header="Test" />
    </GridView>
</ListView.View>

列表视图项目实际上是此标题下方的浅灰色条纹。

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

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

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

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

答案 1 :(得分:0)

感谢Stephen,到目前为止这是解决方案:

<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>

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

enter image description here

对此的诀窍在于使用数据绑定时:

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