当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《WPF:将宽度(和高度)设置为百分比值》经验,为你挑选了5个好方法。

说我想要一个TextBlock有它Width等于它的父容器的Width(即从一侧伸展到另一侧)或它的一个百分比的父容器Width,我怎么能做到这一点XAML,而无需指定绝对值?

我想这样做,以便如果稍后展开父容器容器(它的' Width增加),它的'子元素也将自动扩展.(基本上,就像在HTML和CSS中一样)



1> cwap..:

这是我之前发布的09年帖子的更新答案,其中包含不正确的信息.以下示例应该更好:

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


    
        
        
    

    
    

这将使#1 2/5的宽度和#2 3/5.

原帖有错误/不完整的信息

不要以为你可以做%,但你可以做*:)

例:


    
        
        
    

    
    

这将使#1 2/5的宽度和#2 3/5.


这仅适用于网格,而不是一般.
我妈妈说我是明星
我已经尝试过了,但是我收到了这个错误:'2*'字符串无法转换为Length.
即使TextBox位于Grid中,这也不起作用.宽度可以设置为Double,Qualified Double(双值后跟px,in,cm或pt)或Auto.请参阅http://msdn.microsoft.com/en-GB/library/system.windows.frameworkelement.width.aspx
实际上,*(Asterisk)是小明星;)http://www.etymonline.com/index.php?term=asterisk
是的..这实际上是一个非常糟糕的回复,但基于所有的赞成,我想它帮助了某人(很久以前),这就是为什么我没有删除它.

2> gcores..:

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

 

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

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



3> kvb..:

通常,您将使用适合您的场景的内置布局控件(例如,如果您希望相对于父级进行缩放,请使用网格作为父级).如果你想用任意的父元素来做,你可以创建一个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%:


    
        
    
    
        
    


您应该考虑将"CultureInfo.InvariantCulture"添加到双重转换中,因为`参数`被视为`string`,而在具有不同`小数分隔符`的文化中,它将无法按预期工作.

4> Zain Ali..:

对于任何收到错误的人:'2*'字符串无法转换为Length.


    
        
        
    
    
        
    

    Your text block a:
    Your text block b:


"auto"只占用控件需要的空间

5> Adem Catamak..:

可以使用IValueConverter实现.从IValueConverter继承的转换器类采用一些参数,如value(百分比)和parameter(父的宽度),并返回所需的宽度值.在XAML文件中,组件的宽度使用所需的值设置:

public class SizePercentageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (parameter == null)
            return 0.7 * value.ToDouble();

        string[] split = parameter.ToString().Split('.');
        double parameterDouble = split[0].ToDouble() + split[1].ToDouble() / (Math.Pow(10, split[1].Length));
        return value.ToDouble() * parameterDouble;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // Don't need to implement this
        return null;
    }
}

XAML:


    



....

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有