如何测量具有自动高度和宽度的画布

时间:2010-03-18 12:06:46

标签: silverlight xaml canvas

我是银光的初学者,所以我希望我能得到一个答案,让我在银光的测量过程中有更多的亮点。

我从silverlight slide control找到了一个令人兴奋的控制 现在我尝试在我的项目中使用它。为了使幻灯片正常工作,我必须将用户控件放在画布上。然后,用户控件自己使用其内容的高度。我只是想改变这种行为,以便将高度设置为父画布的可用空间。

您会看到设置高度的uxBorder。如何测量实际高度并将其设置为边界?

我用Height={Binding ElementName=notificationCanvas, Path=ActualHeight}尝试过,但是这个依赖属性没有回调,因此永远不会设置actualHeight。

我希望实现的是Jesse Liberty's blog

每个示例的tweetboard之类的用户控件

对不起我的英文写作,我希望你理解我的问题。

<Canvas x:Name="notificationCanvas" Background="Red">
            <SlideEffectEx:SimpleSlideControl GripWidth="20" GripTitle="Task"  GripHeight="100">
                <Border x:Name="uxBorder"
                  BorderThickness="2"
                  CornerRadius="5"
                  BorderBrush="DarkGray"
                  Background="DarkGray"
                  Padding="5" Width="300"
                  Height="700"
                  >
                    <StackPanel>
                        <TextBlock Text="Tasks"></TextBlock>
                        <Button x:Name="btn1" Margin="5" Content="{Binding ElementName=MainBorder, Path=Height}"></Button>
                        <Button x:Name="btn2" Margin="5" Content="Second Button"></Button>
                        <Button x:Name="btn3" Margin="5" Content="Third Button"></Button>
                        <Button x:Name="btn1_Copy" Margin="5" Content="First Button"/>
                        <Button x:Name="btn1_Copy1" Margin="5" Content="First Button"/>
                        <Button x:Name="btn1_Copy2" Margin="5" Content="First Button"/>
                        <Button x:Name="btn1_Copy3" Margin="5" Content="First Button"/>
                        <Button x:Name="btn1_Copy4" Margin="5" Content="First Button"/>
                        <Button x:Name="btn1_Copy5" Margin="5" Content="First Button"/>
                        <Button x:Name="btn1_Copy6" Margin="5" Content="First Button"/>
                    </StackPanel>
                </Border>
            </SlideEffectEx:SimpleSlideControl>

2 个答案:

答案 0 :(得分:1)

嘿 - 有几件事:

  • 我猜它只是一个错字,但是:“{Binding ElementName = MainBorder,Path = Height}”应为“{Binding ElementName = uxBorder,Path = Height}”(或ActualHeight)
  • SlideEffect似乎设置了一个剪辑几何体,这将影响它看起来“大”的样子

    RectangleGeometry clipRect = new RectangleGeometry();

    clipRect.Rect = new Rect(0, 0, panel.ActualWidth, host.Height);

    host.Clip = clipRect;

如果您从幻灯片控件中注释掉上面的行,您应该会看到面板外观的显着变化。

答案 1 :(得分:1)

我认为ActualWidth或ActualHeight属性不能仅设置为gettable。

为此,您将无法使用绑定,可能是在页面加载后创建元素,因为创建时刻的Canvas实际大小将是未知的。

为什么不尝试使用双向绑定为此创建属性,并在layoutUpdated上签名Canvas事件并更新属性的值,因此更新所有相关对象。
我不知道这个事件是否是正确的,通过检查它是否对你有帮助。