Как я могу "закрепить" холст у его родителя?
У меня есть 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 свойства этого пользовательского холста внутри. И нужно, чтобы эти свойства всегда были «привязаны» к родительскому контейнеру.
Width
Height
Попробуйте это
Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl, AncestorLevel=1}, Path=ActualWidth}"
То же самое касается высоты
Если вы не установите свойства Width и Height в Canvas, они будут занимать все пространство, доступное в UserControl. Вот простой пример:
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 будет следовать.
Grid