我正在尝试将多键连接与XAML中具有按钮控件和宽度属性的转换器结合使用,但我无法正常工作。
转换器是:
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
参数包含在多点路径中传递的正确值。但是,按钮的宽度设置为其内容,而不是上面示例中的40个。
ColumnsToWidthConverter
在父 ListView.Resources
中定义
<converter:ColumnsToWidthConverter x:Key="ColumnsToWidthConverter"/>
当我删除多键并将宽度属性设置为XAML定义中的40时,该按钮的渲染正确。
root
元素是USERCONTROL本身,KeyHeight
是DependencyProperty
。
如何使用多接口设置按钮宽度?
问题不是来自多键,而是来自转换器本身。实现转换器时,您应该返回与控件预期的值类型(由于您是实施转换器的人,因此没有隐含的转换)。在这种情况下,Width
属性是double
,因此您应该返回相同类型的值:
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return 40d;
}