引言
我的代码与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
的样式,它基本上删除了对它的绑定(ListView
和ItemsSource
)并将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
而没有工作。HorizontalAlignment
以查看其是否存在对齐问题以及是否有效。HorizontalContentAlignment
更改为SO帖子建议VerticalAlignment
或Stretch
而没有工作。Center
本身的路线,没有工作Right
的样式本身,而没有工作。CheckBox
的精确副本,而 的副本ListView
和ListView
的绑定,然后只在Style
的正文中添加ItemsSource
(以查看是否与<ListViewItem>Item1</ListViewItem>
或ListView
有关,没有工作。ItemsSource
设置为与示例中设置的确切样式相匹配,没有工作。结论
最让我感到困惑的是,与帖子中的例子完全没有什么不同,但由于某种原因它不起作用。我想不出任何其他的尝试。
u_u
修改
好的,所以我已经通过逐步向Style
添加更多我的样式和触发器,从已发布的here重建网格。
我一无所获。
我很沮丧,它可能是什么? CheckBox
中GridView
和Style
s的顺序发生了变化,这是否会产生影响而不会导致完全错误?
在这一点上,我太害怕打破它来玩弄风格并想出来。
u_u
答案 0 :(得分:1)
无法重现这一点,也许你在Application.Resources
中有一个或多个样式(例如一个完整的主题)会干扰,这些样式适用于ControlTemplates
并可能搞砸了。
答案 1 :(得分:0)
这个问题仍然是一个谜,因为我基本上删除了代码并重新构建它并且它有效。我无法重现错误。
对于那些在将来看这个问题的人,我偶然发现了一个简单而痛苦的明显解决这个问题的方法。如果列将是一个设置宽度(我想大多数情况下,看起来CheckBoxes大小相同),你可以设置CheckBox
的余量来碰撞{{1}到列的中间。简单。为什么我没有想到它超出了我,但我真的想了解我做错了什么。哦,好吧......
u_u