将Canvas停靠在其父级中

时间:2010-10-27 09:52:24

标签: wpf canvas dock

如何在其父级中“停靠”画布?

我有一个包含画布的UserControl。

<UserControl x:Class="MyUC"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d"              
         d:DesignHeight="300" d:DesignWidth="300">
    <MyCanvas x:Name="myCanvas" 
        Height="???" 
        Width="???{Binding RelativeSource={RelativeSource TemplatedParent}}" >
    </MyCanvas>
</UserControl>

我使用此自定义画布的WidthHeight属性。并且需要该属性始终“绑定”到父容器。

3 个答案:

答案 0 :(得分:5)

试试这个

Width="{Binding RelativeSource={RelativeSource FindAncestor, 
                                               AncestorType=UserControl, 
                                               AncestorLevel=1},
                Path=ActualWidth}"

高度相同

答案 1 :(得分:2)

如果您未在Width中设置HeightCanvas属性,则会占用UserControl中的所有可用空间。这是一个简单的例子:

[MainWindow.xaml]

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Width="500" Height="500"
        x:Class="WpfApplication1.MainWindow">
    <Grid Background="Blue">
        <local:UserControl1 />
    </Grid>
</Window>

[UserControl1.xaml]

<UserControl x:Class="WpfApplication1.UserControl1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         Background="Green">
<Canvas Background="Red" />

如果您运行此应用,您会看到背景颜色为红色,这意味着Canvas占用UserControl(及其父Grid提供的所有空间})。您还可以调整窗口大小 - Canvas将会跟随。

答案 2 :(得分:0)

<MyCanvas x:Name="myCanvas" 
     Width ="{Binding ElementName=myUserControl, Path=Width}" 
     Height="{Binding ElementName=myUserControl, Path=Height}">
</MyCanvas>