我有Label
&我想要显示的Border
(该行)如下
问题是客户名称可以是任何大小,然后它重叠在该行上。 有没有办法将线条与标签的大小联系起来?
注意:两个组件都位于Grid
的同一单元格中。
答案 0 :(得分:4)
这就是Grid
的用途。您可以将网格放在网格的单元格内,也可以将外网格与ColumnSpan
结合使用:
<Grid MaxWidth="240">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Content="Client Name" Grid.Column="0" />
<Border Grid.Column="1" ... />
</Grid>
第一列可以获得所需的空间,第二列可以获得尽可能多的空间(可以更多,或更少,比它需要的更多)。我放在网格上的MaxWidth
是可选的。它确保客户端名称超过一定长度时被切断。
还有其他几种方法可以做到这一点,但我发现Grid
是最灵活,最容易维护的,尽管需要写更多的字符。
kidshaw给出的方法:
<DockPanel LastChildFill="True">
<Label Content="Client Name" DockPanel.Dock="Left" />
<Border ... />
</DockPanel>
下一个将在边框顶部绘制标签,但需要知道背景颜色,如果背景是渐变或图像,这将无效:
<Border ... />
<Label HorizontalAlignment="Left" Content="Client Name" Background="White" />
这是一个不同的问题,尽管提出的问题完全不同,但答案相同:How to get StackPanel's children to fill maximum space downward?
答案 1 :(得分:1)
彼得提供了一个很好的答案+1。
如果有兴趣的话,可以选择停靠面板。
将两个控件设置为左侧,并将面板设置为上次子填充...
<DockPanel LastChildFill="True">
<Label DockPanel.Dock="Left>
Label text
<\Label>
<Path dockpanel.dock="Left"/>
<\DockPanel>
答案 2 :(得分:1)
我发布了这个例子,虽然已经提到了很多。
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" Width="125">
<TextBox Text="Lie" Name="Label1" MaxWidth="{Binding RelativeSource={RelativeSource AncestorType=StackPanel}, Path=Width}"/>
<Border Background="CadetBlue" Height="5">
<Border.Width>
<MultiBinding Converter="{StaticResource Converter}">
<Binding RelativeSource="{RelativeSource AncestorType=StackPanel}" Path="Width"/>
<Binding ElementName="Label1" Path="ActualWidth"/>
</MultiBinding>
</Border.Width>
</Border>
</StackPanel>
[ValueConversion(typeof(double), typeof(double))]
public class MyConverterS : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
double panelWidth, elementWidth;
Double.TryParse(values[0].ToString(), out panelWidth);
Double.TryParse(values[1].ToString(), out elementWidth);
if (panelWidth - elementWidth <= 0)
return 0;
return panelWidth - elementWidth;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}