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

WPF - 将一个控件的值传递给Converter以在另一个控件上设置宽度

如何解决《WPF-将一个控件的值传递给Converter以在另一个控件上设置宽度》经验,为你挑选了2个好方法。

我想根据容器的宽度设置TextBlock的宽度减去TextBlock上设置的边距.

这是我的代码

This is a message

这很有效,除了由于Left和Right Margins bbeing设置为5而TextBlock为10个单位太大的事实.

好的,所以我想......让我们使用转换器.但我不知道如何传递容器控件的ActualWidth(参见上图:LayoutRoot).

我知道如何使用转换器,甚至是带参数的转换器,只是不是像......参数ElementName = LayoutRoot,Path = ActualWidth

例如,我无法完成这项工作......

Width="{Binding Converter={StaticResource PositionConverter},  
       ConverterParameter={Binding ElementName=LayoutRoot,Path=ActualWidth }}"

我希望我已经说清楚了,希望你可以提供帮助,因为Google今晚对我毫无帮助.

TIA!

道格



1> Danny Varod..:

你应该使用另一个控件作为源,而不是参数.参数必须是常量,在您的情况下可以是-5.

我现在不在VS附近所以语法可能不准确,但是,它是这样的:

Width="{Binding ElementName=LayoutRoot, Path=ActualWidth,
Converter={StaticResource PositionConverter}, ConverterParameter=-5}"

(转换器将接收-5作为字符串,并且在使用之前必须将其转换为数字.)

根据我的经验,最好使用DependecyProperty XXX的OnXXXChanged回调,而不是将相同窗口/根控件内的控件绑定到另一个.其中一个原因是您可能希望稍后将它们绑定到外部元素.

或者,使用multibinding:


    
        
            
                 
                 
          
        
    

和一个转换器,将两个参数转换为您想要的值.



2> 小智..:

是的..多重绑定对我有用..实际上我试图发送一个元素作为一个convereterparameter,但它不接受.这就是为什么我将元素作为值传递给转换器类.

下面是我的例子..




    

        
            
                
                    
                    
                
            
        
    ....
    
    
    ....
    



在窗口调整大小时,我的第一个gridviewcolumn必须调整大小,而不是其他两个gridviewcolumns ..我通过listview的Actualwidth和总gridview对象作为元素..如果你去转换器代码...

class GetWidthfromParentControl : IMultiValueConverter
{
    #region IMultiValueConverter Members

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        GridView view = values[1] as GridView;
        GridViewColumnCollection collc = view.Columns;
        double actualWidths = collc[1].ActualWidth + collc[2].ActualWidth;
        return ((double)values[0] - actualWidths );
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }

    #endregion
}

这对我有用...... :)

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