如何在按钮宽度中使用多重绑定
How to use multibinding in Button width
我正在尝试将 Multibinding 与带有 Button 控件和 XAML 中的 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 定义中将宽度 属性 设置为 40 时,按钮会正确呈现。
root
元素是用户控件本身,KeyHeight
是 DependencyProperty
。
如何使用多重绑定设置按钮宽度?
问题不是来自多重绑定,而是来自转换器本身。实现转换器时,您需要 return 与控件所期望的相同类型的值(没有隐式转换,因为您是实现转换器的人)。在这种情况下,Width
属性 是一个 double
,所以你应该 return 一个相同类型的值:
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return 40d;
}
我正在尝试将 Multibinding 与带有 Button 控件和 XAML 中的 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 定义中将宽度 属性 设置为 40 时,按钮会正确呈现。
root
元素是用户控件本身,KeyHeight
是 DependencyProperty
。
如何使用多重绑定设置按钮宽度?
问题不是来自多重绑定,而是来自转换器本身。实现转换器时,您需要 return 与控件所期望的相同类型的值(没有隐式转换,因为您是实现转换器的人)。在这种情况下,Width
属性 是一个 double
,所以你应该 return 一个相同类型的值:
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return 40d;
}