这是在WPF中折叠和还原内容的适当方法吗?

BK

我有一个简单的网格,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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

这是对websocket编程的适当使用吗?

来自分类Dev

这是对继承而非继承的适当使用吗?

来自分类Dev

这是对继承而非继承的适当使用吗?

来自分类Dev

这是开始在多个MVC应用程序之间共享代码的适当方法吗?

来自分类Dev

这是在WPF中使用Tasking&Dispatcher的正确方法吗?

来自分类Dev

这是在mongodb中插入和更新对象数组的安全方法吗?

来自分类Dev

这是根据angularjs中的根来组织用于显示和隐藏html的代码的好方法吗

来自分类Dev

将变量和函数存储在字典中,这是正确的方法吗?

来自分类Dev

WPF 中的弱事件“徘徊” - 这是预期的行为吗?

来自分类Dev

PHP - 这是获取 html 内容的最快和最好的方法

来自分类Dev

消除折叠内容中的阻止渲染的JavaScript和CSS

来自分类Dev

图像更改和内容折叠在jQuery中的onclick

来自分类Dev

在WPF中折叠网格

来自分类Dev

WPF中的WhiteSpace折叠

来自分类Dev

从使用writeTo方法保存的内容中还原Message对象

来自分类Dev

保存和还原终端内容

来自分类Dev

这是找到校验和的正确方法吗?

来自分类Dev

这是启动和停止粒子系统的正确方法吗

来自分类Dev

这是更改int和str的最佳方法吗?

来自分类Dev

这是适当的行为吗?std :: map迭代器无效

来自分类Dev

在 FFmpeg 中映射不同的流,这是相同的吗?和工作?

来自分类Dev

这是处理管道中的错误/异常的正确方法吗?

来自分类Dev

这是将readFileSync包装在Promise中的正确方法吗

来自分类Dev

这是在javascript中实现链接的正确方法吗?

来自分类Dev

这是在C中删除链接列表的正确方法吗?

来自分类Dev

这是在golang中终止goroutine的正确方法吗?

来自分类Dev

更改列表中的元组-这是最好的方法吗?

来自分类Dev

这是在Apache 2.4.7中启用htaccess的正确方法吗

来自分类Dev

这是在Golang中清空列表的安全方法吗?

Related 相关文章

  1. 1

    这是对websocket编程的适当使用吗?

  2. 2

    这是对继承而非继承的适当使用吗?

  3. 3

    这是对继承而非继承的适当使用吗?

  4. 4

    这是开始在多个MVC应用程序之间共享代码的适当方法吗?

  5. 5

    这是在WPF中使用Tasking&Dispatcher的正确方法吗?

  6. 6

    这是在mongodb中插入和更新对象数组的安全方法吗?

  7. 7

    这是根据angularjs中的根来组织用于显示和隐藏html的代码的好方法吗

  8. 8

    将变量和函数存储在字典中,这是正确的方法吗?

  9. 9

    WPF 中的弱事件“徘徊” - 这是预期的行为吗?

  10. 10

    PHP - 这是获取 html 内容的最快和最好的方法

  11. 11

    消除折叠内容中的阻止渲染的JavaScript和CSS

  12. 12

    图像更改和内容折叠在jQuery中的onclick

  13. 13

    在WPF中折叠网格

  14. 14

    WPF中的WhiteSpace折叠

  15. 15

    从使用writeTo方法保存的内容中还原Message对象

  16. 16

    保存和还原终端内容

  17. 17

    这是找到校验和的正确方法吗?

  18. 18

    这是启动和停止粒子系统的正确方法吗

  19. 19

    这是更改int和str的最佳方法吗?

  20. 20

    这是适当的行为吗?std :: map迭代器无效

  21. 21

    在 FFmpeg 中映射不同的流,这是相同的吗?和工作?

  22. 22

    这是处理管道中的错误/异常的正确方法吗?

  23. 23

    这是将readFileSync包装在Promise中的正确方法吗

  24. 24

    这是在javascript中实现链接的正确方法吗?

  25. 25

    这是在C中删除链接列表的正确方法吗?

  26. 26

    这是在golang中终止goroutine的正确方法吗?

  27. 27

    更改列表中的元组-这是最好的方法吗?

  28. 28

    这是在Apache 2.4.7中启用htaccess的正确方法吗

  29. 29

    这是在Golang中清空列表的安全方法吗?

热门标签

归档