[英]How to resize control according to another control ? (WPF)
我有一個Label
和Border
(線),我想顯示如下
問題是客戶的名字可以是任意大小,然后在行上重疊。 有什么方法可以將線條與標簽的大小相關聯?
注意:這兩個組件都在Grid
的同一單元Grid
。
這就是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" />
這是一個不同的問題,盡管提出的問題完全不同,但答案相同: 如何使StackPanel的子級向下填充最大空間?
彼得提供了一個不錯的答案+1。
如果有興趣的話,可以選擇停靠面板。
將兩個控件都設置在左側,並將面板設置為最后一個子填充...
<DockPanel LastChildFill="True">
<Label DockPanel.Dock="Left>
Label text
<\Label>
<Path dockpanel.dock="Left"/>
<\DockPanel>
我已經發布了這個示例,盡管已經提到了很多示例。
<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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.