【问题标题】:User-resizable WPF Controls?用户可调整大小的 WPF 控件?
【发布时间】:2012-08-01 19:20:13
【问题描述】:

在 XAML 中,如何调整控件或显示部分的大小,就像可以抓取和调整 Visual Studio 中的不同面板(如工具箱、解决方案资源管理器或错误列表)一样?

在这个虚构的例子中。 . .

<Window x:Class="UI_Experiments_1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <DockPanel x:Name="Tab3DockPanel" Background="#FFA0FFA0" LastChildFill="True">
        <ScrollViewer DockPanel.Dock="Left" Background="Lavender">
            <TextBlock Height="60" TextWrapping="Wrap" Background="#FFFFDDDD" Width="140">
                  ScrollViewer - DockPanel.Dock="Left"
            </TextBlock>
        </ScrollViewer> 
        <TextBlock DockPanel.Dock="Top" HorizontalAlignment="Center" 
               TextWrapping="Wrap" Background="LemonChiffon">
               DockPanel.Dock="Top" HorizontalAlignment="Center"
        </TextBlock>
        <ListBox DockPanel.Dock="Right" Background="#FFCCEEFF">
               ListBox DockPanel.Dock="Bottom" 
        </ListBox>
    </DockPanel>
</Window>

。 . .我有一个 DockPanel,其中 ScrollView 停靠在左侧,ListBox 停靠在底部,TextBlock 停靠在顶部。有没有办法将调整大小的句柄附加到这些控件以达到相同的效果,或者是否有其他可以嵌入这些控件的控件?正如我所说,以上只是一个虚构的实验示例——我不在乎我是否使用那些精确的控件。

我确实在 MSDN 上找到了一个使用 Adorner 添加调整大小句柄的示例,但它涉及超过 170 行 C# 代码,因此在采用之前,我想确定在 XAML 中没有内在的方法来实现这一点。

提前致谢。

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:

    不是您询问的确切控件,而是一个示例。需要一个分离器,两边都有什么 * 和包含的控制伸展。

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="*" />     
        </Grid.ColumnDefinitions>
        <TextBox Grid.Row="0" Grid.Column="0" 
                 HorizontalAlignment="Stretch" 
                 VerticalAlignment="Stretch" 
                 Text="TexBox" />      
        <GridSplitter Grid.Row="0" Grid.Column="1" Margin="2,0,2,0"
                      Width="3" Background="Purple" 
                      VerticalAlignment="Stretch" 
                      HorizontalAlignment="Center" />
        <ListView Grid.Row="0" Grid.Column="2" Background="Aqua" 
                  HorizontalAlignment="Stretch" 
                  VerticalAlignment="Stretch"/>
    </Grid>
    

    【讨论】:

    • 为什么要将第二个ColumnDefinition 的宽度设置为自动?这会导致 GridSplitter 自身变得可调整大小。
    • @DdW 真的吗?你测试过这个吗?
    • 是的...结合其他两个上的*,它保持其他两个相同的大小,同时调整GridSplitter的大小。我的建议:在GridSplitter 和它的ColumnDefinition 上保持宽度固定(3 或 5 像素左右)
    • @DdW 不知道该说什么?效果很好。
    • GridSplitter 的最低要求属性似乎是 Grid.ColumnHorizontalAlignmentWidth。此外,如果只有一行,则行定义不是必需的。
    【解决方案2】:

    您可能会使用GridSplitter 您需要做的是使用 Grid 进行布局,然后使用 GridSplitter 调整列或行的大小。

    这是How to: Create User-Resizable Applications with GridSplitter上的一个例子

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 2011-04-10
      • 2010-10-20
      相关资源
      最近更新 更多