【问题标题】:Binding to ActualHeight does not work绑定到 ActualHeight 不起作用
【发布时间】:2010-09-24 13:04:33
【问题描述】:

我尝试创建一个自定义控件,具有半透明圆形背景:

<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>

问题是我可能无法绑定到 ActualHeight/ActualWidth 属性,因为它们不是依赖项。

如何保持矩形和文本框大小相同?

【问题讨论】:

    标签: wpf binding actualwidth actualheight


    【解决方案1】:

    正确的绑定是在绑定到另一个元素时使用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 的宽度绑定到TextBlockHeight,对吧?

    如果这确实是您想要设置控件的方式,您需要将Rectangle 的宽度绑定到TextBlockActualWidth,并将Height 绑定到ActualHeight

    更新 根据下面的 cmets,这是一个使用 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>
    

    GridCanvas use different layout systems,由于您没有使用Canvas 提供的功能,所以Grid 是更好的选择。

    子元素的最大区别在于 Rectangle 现在只在整个 Grid 中使用 Horizo​​ntal 和 VerticalAlignmentStretch,而不用担心任何东西的大小。

    【讨论】:

    • 对 ElementName 有很好的观察。如果我想将它绑定到 Canvas 本身(UserControl 的主要元素)怎么办。我应该设置什么?
    • 我会简单地使用网格而不是画布,然后您根本不需要任何绑定。我会更新我的答案。
    • 嗯...对于 Canvas,我使用 this.SetValue(Canvas.LeftProperty 设置 UserControl 的位置(在 UserControl 内)。现在我该怎么办,使用 Grid?
    • 我相信甚至应该有一种方法来设置 TextBox 以便不需要“外部”背景矩形...
    • #1.) 你仍然可以设置 Canvas.LeftProperty,即使它是一个网格。 #2.) 是的,您当然可以通过使用 UIElement 的 Template 属性设置 ControlTemplate 来设置 TextBlock(或 TextBox 或任何 UIElement)的样式。这是 WPF 的(?)基本基础。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2011-02-20
    • 1970-01-01
    • 2012-04-15
    • 2010-12-08
    • 2015-05-23
    • 1970-01-01
    相关资源
    最近更新 更多