为什么 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注入你想要的控件类型。
- 确保注入的控件绑定到正确的内容路径名。
我有一个 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注入你想要的控件类型。
- 确保注入的控件绑定到正确的内容路径名。