ser*_*hio 2 wpf binding actualwidth actualheight
我试图创建一个自定义控件,具有半透明的圆形背景:
<Canvas>
<TextBlock x:Name="StopText" Text="Some test text"/>
<Rectangle Fill="SkyBlue"
Width="{Binding Source=StopText, Path=ActualHeight}"
Height="20"
RadiusX="5" RadiusY="5" Opacity="0.2"/>
</Canvas>
Run Code Online (Sandbox Code Playgroud)
问题是我不能绑定到ActualHeight
/ ActualWidth
properties,因为它们不是依赖项.
如何处理相同大小的矩形和文本框?
Won*_*ane 10
正确的绑定是在绑定到另一个元素时使用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>
Run Code Online (Sandbox Code Playgroud)
此外,你意识到你的宽度结合Rectangle
到Height
的TextBlock
,对不对?
如果这是你想要设置控件的方式,你需要将Rectangle
's Width 绑定到TextBlock
's ActualWidth
和Height
to ActualHeight
.
更新
根据下面的评论,这是一个使用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>
Run Code Online (Sandbox Code Playgroud)
Grid
并Canvas
使用不同的布局系统,因为您没有使用Canvas
提供的功能,Grid
是更好的选择.
在子元素的最大区别是,Rectangle
现在只是使用水平和VerticalAlignment
对Stretch
整个Grid
,而不必担心任何东西的尺寸.