[英]How to use multibinding in Button width
我正在尝试将Multibinding与XAML中具有Button控件和Width属性的转换器结合使用,但无法正常工作。
转换器是:
public class ColumnsToWidthConverter: IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return 40;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
为了测试目的,它已经硬编码了40个。
XAML定义为:
<Button
Height="{Binding ElementName=root,Path=KeyHeight}"
FontSize="{Binding FontSize}"
Content="{Binding Display}"
Command="{Binding ElementName=root, Path=Command}"
CommandParameter="{Binding}"
Style="{StaticResource SelectedButton}">
<Button.Width>
<MultiBinding Converter="{StaticResource ColumnsToWidthConverter}">
<Binding Path="Columns"/>
<Binding Path="KeyHeight" ElementName="root"/>
</MultiBinding>
</Button.Width>
</Button>
该按钮从ListView
呈现,并在ListView.ItemTemplate
定义。 在调试应用程序时,将传递转换器并返回40的值。 object[] values
参数包含在MultiBinding路径中传递的正确值。 但是,按钮的宽度设置为其内容,而不是如上例所示的40。
ColumnsToWidthConverter
在父ListView.Resources
定义。
<converter:ColumnsToWidthConverter x:Key="ColumnsToWidthConverter"/>
当我删除MultiBinding并将XAML定义中的Width属性设置为40时,按钮将正确呈现。
root
元素是usercontrol本身,而KeyHeight
是DependencyProperty
。
如何使用多重绑定设置按钮宽度?
问题不在于多重绑定,而在于转换器本身。 在实现转换器时,期望您返回与控件期望值相同的类型(因为您是在实现转换器,所以没有隐式转换)。 在这种情况下, Width
属性是double
,因此您应该返回相同类型的值:
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return 40d;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.