假设我想让一个TextBlock的Width等于它的父容器的Width (即,从一边到另一边拉伸)或它的父容器Width的一个百分比,我如何在不指定绝对值的情况下在XAML中实现这一点?
我想这样做是为了如果父容器容器稍后被展开(它的‘Width’增加了),它的‘子元素’也会自动展开。(基本上,就像HTML和CSS一样)
发布于 2009-04-04 16:24:11
将其拉伸到与父容器相同的大小的方法是使用属性:
 <Textbox HorizontalAlignment="Stretch" ...这将使Textbox元素水平拉伸,并水平填充所有父空间(实际上,这取决于您使用的父面板,但在大多数情况下应该都有效)。
百分比只能与网格单元格值一起使用,因此另一个选择是创建一个网格,并将您的文本框放入其中一个具有适当百分比的单元格中。
发布于 2009-04-04 16:04:34
您可以将文本框放在网格中,以对网格的行或列执行百分比值,并让文本框自动填充到其父单元格(默认情况下)。示例:
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="3*" />
    </Grid.ColumnDefinitions>
    <TextBox Grid.Column="0" />
    <TextBox Grid.Column="1" />
</Grid>这将使#1 2/5的宽度和#2 3/5。
发布于 2009-04-04 16:35:35
通常,您将使用适合您的场景的内置布局控件(例如,如果您希望相对于父级进行缩放,则使用网格作为父级)。如果你想用一个任意的父元素来做这件事,你可以创建一个ValueConverter来做它,但是它可能不会像你想要的那样干净。但是,如果你确实需要它,你可以这样做:
public class PercentageConverter : IValueConverter
{
    public object Convert(object value, 
        Type targetType, 
        object parameter, 
        System.Globalization.CultureInfo culture)
    {
        return System.Convert.ToDouble(value) * 
               System.Convert.ToDouble(parameter);
    }
    public object ConvertBack(object value, 
        Type targetType, 
        object parameter, 
        System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}它可以像这样使用,以获得其父画布宽度的10%的子文本框:
<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication1"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <local:PercentageConverter x:Key="PercentageConverter"/>
    </Window.Resources>
    <Canvas x:Name="canvas">
        <TextBlock Text="Hello"
                   Background="Red" 
                   Width="{Binding 
                       Converter={StaticResource PercentageConverter}, 
                       ElementName=canvas, 
                       Path=ActualWidth, 
                       ConverterParameter=0.1}"/>
    </Canvas>
</Window>https://stackoverflow.com/questions/717299
复制相似问题