Правильное связывание использовать ElementName
, не Source
, когда связывание с другим элементом:
<Canvas>
<TextBlock x:Name="StopText" Text="Some test text"/>
<Rectangle Fill="SkyBlue"
Width="{Binding ElementName=StopText, Path=ActualHeight}"
Height="20"
RadiusX="5" RadiusY="5" Opacity="0.2"/>
</Canvas>
Кроме того, вы понимаете, что вы связывание ширины Rectangle
к Height
в TextBlock
, право ?
Если это действительно так, как вы хотите настроить свой контроль, вы хотите привязать Rectangle
«Ширина s к TextBlock
» s ActualWidth
и Height
к ActualHeight
.
UPDATE Per комментариев ниже, здесь является реализацией с использованием Grid
с не обязательным:
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<TextBlock x:Name="StopText" Text="Some test text"/>
<Rectangle Fill="SkyBlue"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
RadiusX="5" RadiusY="5" Opacity="0.2"/>
</Grid>
Grid
и Canvas
use different layout systems, и так как вы не используете функциональные Canvas
обеспечивает, Grid
это лучший выбор.
Большая разница в дочерних элементах является то, что Rectangle
теперь просто использует горизонтальной и VerticalAlignment
для Stretch
по всей Grid
, вместо того, чтобы беспокоиться о размерах ничего.
Хорошее наблюдение за ElementName. Что делать, если я хотел бы привязать его к самому холсту (основному элементу UserControl). Что я должен установить? – serhio
Я бы просто использовал Grid вместо Canvas, и тогда вам вообще не нужно привязывать. Я уточню свой ответ. –
Хмм ... С Canvas я использовал 'this.SetValue (Canvas.LeftProperty', чтобы установить местоположение UserControl (внутри UserControl). Как мне теперь сделать, с помощью Grid? – serhio