首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WPF:将宽度(和高度)设置为百分比值

WPF:将宽度(和高度)设置为百分比值
EN

Stack Overflow用户
提问于 2009-04-04 15:55:14
回答 6查看 349.5K关注 0票数 162

假设我想让一个TextBlockWidth等于它的父容器的Width (即,从一边到另一边拉伸)或它的父容器Width的一个百分比,我如何在不指定绝对值的情况下在XAML中实现这一点?

我想这样做是为了如果父容器容器稍后被展开(它的‘Width’增加了),它的‘子元素’也会自动展开。(基本上,就像HTML和CSS一样)

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-04-04 16:24:11

将其拉伸到与父容器相同的大小的方法是使用属性:

代码语言:javascript
复制
 <Textbox HorizontalAlignment="Stretch" ...

这将使Textbox元素水平拉伸,并水平填充所有父空间(实际上,这取决于您使用的父面板,但在大多数情况下应该都有效)。

百分比只能与网格单元格值一起使用,因此另一个选择是创建一个网格,并将您的文本框放入其中一个具有适当百分比的单元格中。

票数 99
EN

Stack Overflow用户

发布于 2009-04-04 16:04:34

您可以将文本框放在网格中,以对网格的行或列执行百分比值,并让文本框自动填充到其父单元格(默认情况下)。示例:

代码语言:javascript
复制
<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。

票数 244
EN

Stack Overflow用户

发布于 2009-04-04 16:35:35

通常,您将使用适合您的场景的内置布局控件(例如,如果您希望相对于父级进行缩放,则使用网格作为父级)。如果你想用一个任意的父元素来做这件事,你可以创建一个ValueConverter来做它,但是它可能不会像你想要的那样干净。但是,如果你确实需要它,你可以这样做:

代码语言:javascript
复制
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%的子文本框:

代码语言:javascript
复制
<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>
票数 64
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/717299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档