ListView.ItemContainerStyle没有应用的问题

时间:2012-02-09 09:35:59

标签: wpf xml listview checkbox alignment

引言

我的代码与this SO question中讨论的代码非常相似。我在CheckBox中有一个ListView列(使用GridView,因为它是View),我试图将CheckBox对齐到柱。

答案建议添加ItemContainerStyle,将HorizontalContentAlignment设置为Center。我试过这个并没有应用这种风格。


CODE:

到目前为止,这是我的代码:

   <ControlTemplate x:Key="NoRedemptions">
          <Border BorderBrush="#FF7F9DB9" HorizontalAlignment="Stretch" BorderThickness="1" Background="White">
               <TextBlock Text="No Redemptions have been added" HorizontalAlignment="Center"></TextBlock>
          </Border>    
   </ControlTemplate>

   <Style x:Key="CellAlignmentStyle" TargetType="{x:Type ListViewItem}">
         <Setter Property="HorizontalContentAlignment" Value="Stretch" />
   </Style> 

   <Style TargetType="ListView" x:Key="ListViewTriggersStyle">
         <Style.Triggers>
              <DataTrigger Binding="{Binding Path=FundRedemptions.Count, UpdateSourceTrigger=PropertyChanged}" Value="0">
                  <Setter Property="ItemsSource" Value="{x:Null}"></Setter>
                  <Setter Property="View" Value="{x:Null}"></Setter>
                  <Setter Property="Template" Value="{StaticResource NoRedemptions}"/>
              </DataTrigger>
        </Style.Triggers>
   </Style>
  • ControlTemplate为空时,使用第一项ListView名为 NoRedemptions 。它实际上删除了GridView的列,只留下带有边框的TextBox,告诉用户ListView为空。

  • 第二项Style名为 CellAlignmentStyle 是从上面的链接复制的样式。这应该以{{1​​}}列为中心。

  • 最后一项CheckBox名为 ListViewTriggerStyle 是一种应用于Style的样式,它基本上删除了对它的绑定(ListViewItemsSource)并将View的{​​{1}}设置为 NoRedemptions ListView(第一个项目符号点),显示的消息是当Template FundRedemptions )的ControlTemplate为空时,ListView为空。

以下ItemsSource绑定为ListView的{​​{1}}(为简单起见,我省略了不相关的列):

GridView

这是违规的ListView本身:

ListView

解决问题的尝试

现在如上所述,项目符号第2点中描述的View,即从上述链接“借用”的<GridView AllowsColumnReorder="False" x:Key="ListViewView"> <GridViewColumn x:Name="checkedColumn" Header="Checked" Width="Auto"> <GridViewColumn.CellTemplate> <DataTemplate> <CheckBox IsChecked="{Binding Path=Checked, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"></CheckBox> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> ,对我的 <ListView Grid.Row="3" Style="{StaticResource ListViewTriggersStyle}" ItemContainerStyle="{StaticResource CellAlignmentStyle}" Grid.ColumnSpan="5" View="{StaticResource ListViewView}" ItemsSource="{Binding Path=FundRedemptions, UpdateSourceTrigger=PropertyChanged}"> </ListView> 无效。

  • 我尝试使用Style代替ListView没有工作。
  • 我尝试在样式中添加其他setter以查看它是否正在应用以及那些setter 是否工作
  • 我尝试更改HorizontalAlignment以查看其是否存在对齐问题以及是否有效。
  • 我尝试从HorizontalContentAlignment更改为SO帖子建议VerticalAlignmentStretch没有工作。
  • 我尝试更改Center本身的路线,没有工作
  • 我尝试将对齐添加到GridView或Right的样式本身,而没有工作。
  • 我尝试在SO帖子的答案中粘贴CheckBox的精确副本,而 的副本
  • 我尝试删除ListViewListView的绑定,然后只在Style的正文中添加ItemsSource(以查看是否与<ListViewItem>Item1</ListViewItem>ListView有关,没有工作。
  • 我尝试将ItemsSource设置为与示例中设置的确切样式相匹配,没有工作。

结论

最让我感到困惑的是,与帖子中的例子完全没有什么不同,但由于某种原因它不起作用。我想不出任何其他的尝试。

u_u


修改

好的,所以我已经通过逐步向Style添加更多我的样式和触发器,从已发布的here重建网格。

我一无所获。

我很沮丧,它可能是什么? CheckBoxGridViewStyle s的顺序发生了变化,这是否会产生影响而不会导致完全错误?

在这一点上,我太害怕打破它来玩弄风格并想出来。

u_u

2 个答案:

答案 0 :(得分:1)

无法重现这一点,也许你在Application.Resources中有一个或多个样式(例如一个完整的主题)会干扰,这些样式适用于ControlTemplates并可能搞砸了。

答案 1 :(得分:0)

这个问题仍然是一个谜,因为我基本上删除了代码并重新构建它并且它有效。我无法重现错误。

对于那些在将来看这个问题的人,我偶然发现了一个简单而痛苦的明显解决这个问题的方法。如果列将是一个设置宽度(我想大多数情况下,看起来CheckBoxes大小相同),你可以设置CheckBox的余量来碰撞{{1}到列的中间。简单。为什么我没有想到它超出了我,但我真的想了解我做错了什么。哦,好吧......

u_u