HelloAll: Я пытаюсь создать пользовательский элемент управления, который нуждается в MultiValueConverter для Масштабирование холста в моем приложении:MultiValueConverter Неспособность Привязать к ViewModel
Он принимает
- Canvas.ActualWidth
- в X Мин инженерных единиц
- X Макс ЭСН Units
.
public class MultiValueScaleTransform : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double numerator = (double)values[0];
double denominator = (double)values[2] - (double)values[1];
return numerator/denominator;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Это, кажется, работает хорошо, когда я кормлю его номером, но когда я связать мой XAML, чтобы посмотреть проблемы моделей происходят:
Вот тзд ошибки:
Ошибка 7 A «Binding 'нельзя установить в свойстве «Путь» типа «Связывание». «Связывание» может быть установлено только на DependencyProperty объекта DependencyObject. C: \ Users \ mwardell \ Documents \ Visual Studio 2013 \ Projects \ HalliburtonCallouts (12) \ HalliburtonCallouts \ HalliburtonCallouts \ View \ элементы управления UserControl \ WellViewUserCtrl.xaml 31 38 HalliburtonCallouts
<UserControl x:Class="HalliburtonCallouts.View.UserControls.WellViewUserCtrl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Converters="clr-namespace:HalliburtonCallouts.ViewModel.Converters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
x:Name="uc">
<UserControl.Resources>
<Converters:ColorToImageBrush x:Key="ColorToBrush"/>
<Converters:ColorToBitmapBrush x:Key="ColorToImg"/>
<Converters:ColorToBG x:Key="ColorToBG"/>
<Converters:ColorToFG x:Key="ColorToFG"/>
<Converters:MultiValueScaleTransform x:Key="ScaleTransform"/>
<SolidColorBrush x:Key="BlueBg" Color="#FFA9DCF1"/>
</UserControl.Resources>
<Border Background="Red">
<StackPanel>
<!-- I used these to make sure the bindings of the user control are working-->
<TextBlock Text="OverallStartDepth"></TextBlock>
<TextBlock Text="{Binding OverallStartDepth}"></TextBlock>
<TextBlock Text="OverallEndDepth"></TextBlock>
<TextBlock Text="{Binding OverallEndDepth}"></TextBlock>
<Canvas x:Name="WellCanvas"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
DataContext="{Binding Mode=OneWay, RelativeSource={RelativeSource PreviousData}}" >
<Canvas.RenderTransform>
<ScaleTransform >
<ScaleTransform.ScaleX >
<MultiBinding Converter="{StaticResource ScaleTransform}">
<Binding Path="ActualWidth"/>
<Binding Path="{Binding OverallStartDepth, FallbackValue=0.0}"/>
<Binding Path="{Binding OverallEndDepth,FallbackValue=100.0}"/>
</MultiBinding>
</ScaleTransform.ScaleX>
</ScaleTransform>
</Canvas.RenderTransform>
</Canvas>
</StackPanel>
</Border>
</UserControl>
я определил, что OverallEndDepth
и OverallStartDepth
являются связующими. См. StackPanel первые четыре пункта или около того. Не означает ли Bindability, что они являются свойствами Dep Dep Dep?
Спасибо @Clemens У меня нет намерения сохранить TextBlock для привязки of OveralEndDepth/StartDepth. Это двойные свойства. Когда я реализую, как было предложено, я получаю литую ошибку. Начиная с –
Так что я все еще застрял. Почему мы поддерживаем то, что не решает проблему. кажется странным –
'ActualWidth' не является собственностью вашего вида модели, поэтому вам нужно указать источник привязки. См. Мое редактирование. – Clemens