Я разработал аналоговое управление часами.Он использует обводку из двух эллипсов, чтобы представить внешнюю границу и внутреннюю границу циферблата.
У меня есть свойства в UserControl, которые позволяют пользователю изменятьтолщина этих двух границ.Свойства Ellipse.StrokeThickness затем привязываются к этим свойствам UserControl.В данный момент я связываю свойство UserControl для толщины внешней границы с полями внутренних элементов, чтобы они не были скрыты при увеличении размера границы.
<Ellipse Name="OuterBorder" Panel.ZIndex="1" StrokeThickness="{Binding OuterBorderThickness,
ElementName=This}" Stroke="{StaticResource OuterBorderBrush}" />
<Ellipse Name="InnerBorder" Panel.ZIndex="5" StrokeThickness="{Binding InnerBorderThickness,
ElementName=This}" Margin="{Binding OuterBorderThickness, ElementName=This}"
Stroke="{StaticResource InnerBorderBrush}">
...
<Ellipse Name="Face" Panel.ZIndex="1" Margin="{Binding OuterBorderThickness, ElementName=This}"
Fill="{StaticResource FaceBackgroundBrush}" />
...
Проблема заключается в том, что еслиТолщина внутренней границы увеличивается, это не влияет на поля, поэтому отметки и цифры часов могут быть частично скрыты или скрыты.Поэтому мне действительно нужно связать свойства полей внутренних элементов управления с суммой значений толщины внутренней и внешней границ (они имеют тип double).
Я сделал это успешно, используя 'DataContext = this; ', но я пытаюсь переписать элемент управления без этого, поскольку слышу, что это не рекомендуется.Я также думал об использовании конвертера и передаче второго значения в качестве ConverterParameter, но не знал, как привязать к ConverterParameter.Любые советы будут с благодарностью.
РЕДАКТИРОВАТЬ >>
Благодаря предложению Кента, я создал простой MultiConverter для добавления входных значений и возврата результата.Я подключил ОДНО ЖЕ мультисвязывание с конвертером XAML и к свойству TextBlock.Text, и к свойству TextBlock.Margin, чтобы проверить его.
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource SumConverter}" ConverterParameter="Add">
<Binding Path="OuterBorderThickness" ElementName="This" />
<Binding Path="InnerBorderThickness" ElementName="This" />
</MultiBinding>
</TextBlock.Text>
<TextBlock.Margin>
<MultiBinding Converter="{StaticResource SumConverter}" ConverterParameter="Add">
<Binding Path="OuterBorderThickness" ElementName="This" />
<Binding Path="InnerBorderThickness" ElementName="This" />
</MultiBinding>
</TextBlock.Margin>
</TextBlock>
Я вижу правильное значение, отображаемое в TexBlock, но Marginне установлен.Любые идеи?
РЕДАКТИРОВАТЬ >> >>
Интересно, что свойство Margin может быть связано со свойством данных типа double, но это, похоже, не применяется в MultiBinding.По совету Кента я изменил конвертер, чтобы он возвращал значение как объект «Толщина», и теперь он работает.Спасибо Кент.