我在绑定边框控件的“width”属性时遇到问题。当我用常量绑定它时,变化反映在运行时,但是当我用转换器绑定它失败时,即使转换器返回的值与常量相同。
这是用户控件。问题在于“边界”对象。如果我这样做,控件的工作原理如下:
<UserControl.Resources>
<DataTemplate x:Key="DataTemplateHeat">
<Border Margin="1,0,0,0" BorderBrush="Black" BorderThickness="1" Width="100">
</Border>
</DataTemplate>
</UserControl.Resources>
<DockPanel>
<ItemsControl x:Name="CnvHeats" ItemsSource="{Binding}" ItemTemplate="{StaticResource DataTemplateHeat}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Background="Red" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</DockPanel>
</UserControl>
但如果我这样做,控件就会失败。转换器执行正确的次数,参数正常,但即使我硬编码返回值也失败:
<UserControl.Resources>
<DataTemplate x:Key="DataTemplateHeat">
<Border Margin="1,0,0,0" BorderBrush="Black" BorderThickness="1">
<Border.Width>
<MultiBinding Converter="{StaticResource proportionalWidthConverter}" >
<Binding Mode="OneWay" Path="GraphProportion" />
<Binding Mode="OneWay" Path="ActualWidth" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type StackPanel}, AncestorLevel=1}"/>
</MultiBinding>
</Border.Width>
</Border>
</DataTemplate>
</UserControl.Resources>
<DockPanel>
<ItemsControl x:Name="CnvHeats" ItemsSource="{Binding}" ItemTemplate="{StaticResource DataTemplateHeat}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Background="Red" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</DockPanel>
</UserControl>
这是转换器:
public class ProportionalWidthConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return 100;
}
public object[] ConvertBack(
object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
任何帮助都是相关的。提前谢谢。
答案 0 :(得分:3)
如果在Debug中运行此示例,Visual Studio中的“输出”窗口将显示以下错误:
System.Windows.Data错误:5:BindingExpression生成的值对目标属性无效。 Value ='100'MultiBindingExpression:目标元素是'Border'(Name =''); target属性是'Width'(类型'Double')
错误文字说明了问题,转换器返回的值不是Double
。将您的退货单更改为return 100.0;
并查看结果。