簡體   English   中英

如何根據另一個控件調整控件的大小? (WPF)

[英]How to resize control according to another control ? (WPF)

我有一個LabelBorder (線),我想顯示如下

在此處輸入圖片說明

問題是客戶的名字可以是任意大小,然后在行上重疊。 有什么方法可以將線條與標簽的大小相關聯?

注意:這兩個組件都在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM