我有一个绑定边框控件的“宽度”属性的问题。当我用一个常量绑定它时,更改会反映在运行时,但是当我将它与转换器绑定时会失败,即使转换器返回的值与常量相同。绑定宽度属性与多重绑定给出的宽度为零
这里是用户控件。问题在于“边框”对象。如果我这样做,控制工程为spected:
<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>
,但如果我这样做,控制系统出现故障。该转换器执行的正确的次数,并且参数都OK,但即使我硬编码返回值失败:
<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();
}
}
任何帮助都是有帮助的。先谢谢你。
它适用于简单的绑定和转换器,即使使用100但不使用多重绑定和转换器。奇怪..!! –