我有一个简单的网格,ListView
占据了最左边的一列:
<Grid Background="Black">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" x:Name="leftColumn"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<GridSplitter Grid.Column="1" HorizontalAlignment="Left" Margin="0" Width="2"
Background="#FF4B4B4B" Grid.RowSpan="2"
MouseDoubleClick="GridSplitter_MouseDoubleClick"/>
<ListView x:Name="lvSubjects" Background="#FF2E2E2E" >
<ListView.View>
<GridView>
<GridViewColumn Width="120"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
这是我的代码,它使我可以折叠并将最左边的列及其内容恢复到原始状态:
private void GridSplitter_MouseDoubleClick(object sender,
System.Windows.Input.MouseButtonEventArgs e)
{
if (leftColumn.Width != GridLength.Auto)
{
lvSubjects.Width = leftColumn.Width.Value;
}
leftColumn.Width = GridLength.Auto;
if (lvSubjects.Visibility == Visibility.Visible)
{
lvSubjects.Visibility = Visibility.Collapsed;
}
else
{
lvSubjects.Visibility = Visibility.Visible;
}
}
请注意,由于列的宽度在用调整Auto
大小时会从变为静态数,因此我不得不在折叠或还原之前执行整个宽度例程GridSplitter
。此方法不是很完善,并且可能无法很好地发挥作用,具体取决于您的操作方式。示例:如果一直拖动GridSplitter
到最左边,请双击然后将其拖出,ListView
将不会展开。在我不知道是否应该进行此操作之前,我不希望进一步开发它。当我完成这部分时,它突然降临了。
我的问题是:我应该在这里做什么还是应该使用Expander
?我觉得自己正在重新发明轮子,但是由于我从未做过可折叠的面板,因此这是完成它的自然方式。
使用扩展器会更清洁,并且我认为对于用户而言更直观。但是,如果您还需要更改列宽,则仍然需要GridSplitter。
<Grid Background="Black">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" x:Name="leftColumn"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Expander Grid.Column="0" IsExpanded="False" ExpandDirection="Left"
Collapsed="Expander_Collapsed_1">
<ListView x:Name="lvSubjects" Background="#FF2E2E2E" >
<ListView.View>
<GridView>
<GridViewColumn Width="120"/>
</GridView>
</ListView.View>
</ListView>
</Expander>
<GridSplitter Grid.Column="1" HorizontalAlignment="Left" Margin="0" Width="2"
Background="#FF4B4B4B" Grid.RowSpan="2" />
</Grid>
如果拆分器是在扩展后使用的,则可以通过在折叠事件中将其设置回“自动”来减小折叠时的列宽:
private void Expander_Collapsed_1(object sender, RoutedEventArgs e)
{
leftColumn.Width = GridLength.Auto;
}
如果要避免代码隐藏,也可以通过样式触发器来执行此操作。如果您不喜欢扩展器箭头图标并想要替换它(例如,用垂直线表示),则需要为其创建一个自定义控件模板。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句