Прикрепите холст к его родителю - PullRequest
3 голосов
/ 27 октября 2010

Как я могу "закрепить" холст у его родителя?

У меня есть 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>

Я использую Width и Height свойства этого пользовательского холста внутри. И нужно, чтобы эти свойства всегда были «привязаны» к родительскому контейнеру.

Ответы [ 2 ]

5 голосов
/ 27 октября 2010

Попробуйте это

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

То же самое касается высоты

2 голосов
/ 27 октября 2010

Если вы не установите свойства Width и Height в Canvas, они будут занимать все пространство, доступное в 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 будет следовать.

...