我有一个用户控件设置为列表框项目的列表框。在这个列表框中,我有几个网格和两个按钮。列表框数据模板和可见状态的问题
<Grid x:Name="LayoutRoot" HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="120" />
<RowDefinition x:Name="personDetailHolder" Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="92.915" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<StackPanel Grid.RowSpan="2"
Grid.ColumnSpan="2"
Margin="0,0,-0.042,0"
Orientation="Vertical"
d:LayoutOverrides="Height">
<Grid Height="117" Margin="3,0,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="117" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Rectangle />
<!-- removed for brevity -->
<Button x:Name="btnViewDetails"
Width="106"
Height="24"
Margin="0,0,3,6"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Click="btnDetails_Click"
Foreground="#FFFBCE2F"
Style="{StaticResource ViewDetailsButton}" />
<!-- Detail section -->
<Grid x:Name="personDetail"
Grid.Row="1"
MinHeight="365"
Margin="0,0,5,-376"
VerticalAlignment="Bottom"
RenderTransformOrigin="0.5,0.5"
Visibility="Collapsed">
<Rectangle />
<!-- removed for brevity -->
<Button x:Name="btnCloseDetails"
Width="123"
Height="24"
Margin="0,8,8,0"
HorizontalAlignment="Right"
VerticalAlignment="Top"
Click="btnDetails_Click"
Foreground="#FFFBC42F"
Style="{StaticResource CloseDetailsButton}" />
</Grid>
</Grid>
</StackPanel>
</Grid>
单击事件btnDetails_Click在代码中调用一个事件的用户控制
private void btnDetails_Click(object sender, System.Windows.RoutedEventArgs e)
{
UIPanelControl cp = new UIPanelControl();
cp.CheckDetailPanelStatus(this.personDetail, this.personDetailHolder, this.btnViewDetails, this.btnCloseDetails, this.detailAnimation);
}
其调用该方法的背后
public void CheckDetailPanelStatus(Grid panelName, RowDefinition rowName, Button openButtonName, Button closeButtonName, Storyboard animi)
{
if (panelName.Visibility == System.Windows.Visibility.Visible)
{
panelName.Visibility = System.Windows.Visibility.Collapsed;
rowName.Height = new GridLength(0);
openButtonName.Visibility = System.Windows.Visibility.Visible;
closeButtonName.Visibility = System.Windows.Visibility.Collapsed;
}
else
{
panelName.Visibility = System.Windows.Visibility.Visible;
rowName.Height = new GridLength(380);
openButtonName.Visibility = System.Windows.Visibility.Collapsed;
closeButtonName.Visibility = System.Windows.Visibility.Visible;
animi.Begin();
}
}
这里的目标是返回给用户结果列表。用户可以点击View additional details按钮展开第二部分,其中显示有关所选记录的更多详细信息。我正在使用MVVM方法,因此命令会发送给虚拟机以方便第二个记录群。由于视图中包含动画,可见性等,因此我决定将这些事件保留在视图代码中。
此解决方案部分适用于当我点击按钮时该部分为选定的列表框项目扩展。但是,如果向下滚动到其他结果,我会发现其他列表框项目会间歇性地展开。这里没有可重复的模式(即每5个项目或每个其他记录)我也看到了一些情况,如果我选择第一条记录并展开它,然后向下滚动到下一条记录并备份第一条记录已被重置崩溃。
对于可能导致此问题的原因我很遗憾。
任何人都可以提供任何见解,为什么我看到这种情况发生或如何防止这种情况发生?
AbdouMomen,非常感谢指针。我尝试了视觉状态和扩展器,都似乎解决了这个问题。为了简单起见,我使用了扩展器元素,但我将来肯定会使用VisualStateBehavior。 – rlcrews 2011-06-03 14:50:46
很高兴帮助:) – AbdouMoumen 2011-06-03 15:42:24