简单的WPF“面板”问题

时间:2011-12-01 14:19:08

标签: wpf c#-4.0 controls

关于wpf中控件布局的“简单”。有一个带网格的自定义控件,这个面板上有“面板”,它们之间有三个元素,两个按钮和滑块。右按钮必须固定在“面板”的右侧,左按钮固定在“面板”的左侧,滑块必须填充所有按钮之间的自由空间。按钮和网格的宽度(和高度)将在代码之后设置为dinamycaly。问题是 - 我必须使用什么样的'面板'以及如何使其在给定任务下运行? (堆栈,停靠 - 即使这个“水平划线”也没有这样的功能) 在WinForms中 - slider = widthOfGrid的宽度没有问题 - (widtOfBothButtons) 这有可能在wpf中完成吗?或者我必须在一些类似构造函数的函数中编写上面的代码? (offtop-至于我这是一个典型的wpf控制任务,我很惊讶它自动解决得太少了)

代码:

<UserControl x:Class="WpfApplication1.UserControl2"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="42" d:DesignWidth="291">
    <Grid x:Name="gridCtrl">
        <Grid.ColumnDefinitions>
            <ColumnDefinition x:Name="clnmLbl" Width="Auto"/>
            <ColumnDefinition x:Name="clnmPnl" />
        </Grid.ColumnDefinitions>

        <Label x:Name="lblText" Grid.Column="0" Content="" VerticalAlignment="Center">

        </Label>
        <DockPanel x:Name="pnlDock" Grid.Column="1">
            <Button x:Name="btnLeft"  HorizontalAlignment="Left" DockPanel.Dock="Left">
            </Button>
        <Border  x:Name="BorderOfSlider"  BorderBrush="#FF000000" BorderThickness="3,3,3,3" CornerRadius="8,8,8,8" >
                <Slider x:Name="sldSlider" HorizontalAlignment="Stretch" VerticalAlignment="Center" >
            </Slider>
            </Border>
        <Button x:Name="btnRight"  HorizontalAlignment="Right" DockPanel.Dock="Right">
            </Button>
        </DockPanel>


    </Grid>
</UserControl>

2 个答案:

答案 0 :(得分:0)

这听起来与DockPanel完全相同......它会将控件停靠在面板的两侧,默认情况下,添加的最后一个控件将拉伸并填充所有剩余空间

<DockPanel>
    <Button DockPanel.Dock="Left" Content="Left Button" />
    <Button DockPanel.Dock="Right" Content="Right Button" />
    <Slider />
</DockPanel>

此外,如果您是WPF新手,我建议您查看this site,以便快速直观地查看WPF的布局控件。

修改

确保填充所有剩余空间的控件是添加到DockPanel最后项。如果没有,它将使用默认值DockPanel.Dock="Left"

答案 1 :(得分:0)

有几种方法可以做到:

1) DockPanel 。左侧按钮将占据DockPanel左侧的某个位置,右侧按钮将占据剩余空间右侧所需的空间。其余的将用于显示Slider。

<DockPanel>
    <Button DockPanel.Dock="Left">Left button</Button>
    <Button DockPanel.Dock="Right">Right button</Button>
    <Slider />
</DockPanel>

2)网格。使用3列创建网格。左侧和右侧列仅占用所需空间,其余列将被赋予中心列。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <Button Grid.Column="0">Left button</Button>
    <Slider Grid.Column="1" />
    <Button Grid.Column="2">Right button</Button>
</Grid>