Używam ContentControl
do dynamicznego renderowania różnych pochodnych UserControl
. Nie mogę do końca życia dowiedzieć się, jak rozciągnąć zawartość, gdy zmieniam rozmiar rodzica Window
. Znalazłem wiele odniesień, takich jak this, ale nadal nie działa dla mnie. Oto prosty przykład:Jak uzyskać dostęp do zawartości WPF ContentControl?
To Window
XAML:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary Source="Dictionary1.xaml"/>
</Window.Resources>
<Grid>
<ContentControl VerticalAlignment="Top"
HorizontalAlignment="Left"
VerticalContentAlignment="Stretch"
HorizontalContentAlignment="Stretch"
Content="{Binding Path=ChildView}"
Margin="10"/>
</Grid>
</Window>
ta wykorzystuje plik zasobów Dictionary1.XAML
:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewModels ="clr-namespace:WpfApplication3"
xmlns:views ="clr-namespace:WpfApplication3">
<DataTemplate DataType="{x:Type viewModels:UserControlViewModel}">
<views:UserControl1/>
</DataTemplate>
</ResourceDictionary>
Oto kod tyłu za głównym Window
jak również zobacz klasy modeli:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel();
}
}
public class MainViewModel
{
public UserControlViewModel ChildView { get; set; }
public MainViewModel()
{
ChildView = new UserControlViewModel();
}
}
public class UserControlViewModel
{
}
i wreszcie kontrola użytkownika:
<UserControl x:Class="WpfApplication3.UserControl1"
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"
Background="Blue"
Height="141" Width="278"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch">
<Grid>
</Grid>
</UserControl>
Oto jak to wygląda w czasie wykonywania:
Co ja tu brakuje? Jak mogę sprawić, aby treść podrzędna zachowywała się tak, aby pozostała zakotwiczona w górnej/lewej części elementu nadrzędnego, a dolna/prawa rozciąga się w miarę zmiany rozmiaru elementu nadrzędnego?
w jaki sposób nie pozostaje on zakotwiczony w górnej/lewej części, jeśli używasz wyrównania pionowego i poziomego 'Stretch' na treści? – Domysee
@Dominik - Nie ma. Pozostaje wyśrodkowany zamiast zakotwiczony do góry/z lewej. –