关于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>
答案 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>