Windows 10 Pro 64, VS 2019 Сообщество, приложение WPF
У меня есть приложение, в котором есть UserControl с двумя членами, каждый из которых является UserControl, который содержит заголовок, содержащий 2–3 строки текста, с ListBox под ним.Моя цель - установить высоту одного заголовка на высоту другого, и я решил связать один заголовок с другим для достижения этой цели.Но, похоже, что мой RelativeSource не разрешается, что приводит к попытке установить высоту в NaN, что, конечно, не меняет ее.Я пробовал много разных способов выразить RelativeSource, и ни один из них не сработал.Вот самое последнее:
Вот главное окно:
<Window x:Class="MyApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MyApp"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<local:MyParentControl x:Name="Daddy"/>
</Grid>
</Window>
И родительский элемент управления, содержащий двух дочерних элементов:
<UserControl x:Class="MyApp.MyParentControl"
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"
xmlns:local="clr-namespace:MyApp"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<StackPanel Orientation="Horizontal">
<local:MySonControl x:Name="Sonny"/>
<local:MyDaughterControl x:Name="Girlie"/>
</StackPanel>
</Grid>
</UserControl>
Первый дочерний элемент управления:
<UserControl x:Class="MyApp.MySonControl"
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"
xmlns:local="clr-namespace:MyApp"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Vertical" x:Name="Header">
<TextBlock Text="Vertical space" HorizontalAlignment="Center"/>
<TextBlock Text="Sonny's Stuff" HorizontalAlignment="Center"/>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Column A" Margin="5,5,5,5"/>
<TextBlock Text="Column B" Margin="5,5,5,5"/>
<TextBlock Text="Column C" Margin="5,5,5,5"/>
</StackPanel>
</StackPanel>
<ListBox x:Name="Stuff"/>
</StackPanel>
</Grid>
</UserControl>
И второй, который содержит оператор связывания:
<UserControl x:Class="MyApp.MyDaughterControl"
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"
xmlns:local="clr-namespace:MyApp"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Vertical" x:Name="Header"
Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:MyParentControl}, Path=Sonny.Header.ActualHeight}"
>
<TextBlock Text="Girlie's Stuff" HorizontalAlignment="Center"/>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Column A" Margin="5,5,5,5"/>
<TextBlock Text="Column B" Margin="5,5,5,5"/>
<TextBlock Text="Column C" Margin="5,5,5,5"/>
</StackPanel>
</StackPanel>
<ListBox x:Name="Stuff"/>
</StackPanel>
</Grid>
</UserControl>
Я не коснулся кода, он просто создан VS.
Вот чтоон отображает:
То, что мы должны увидеть, это то, что правый заголовок имеет ту же высоту, что и левый, но как вымогу сказать, что это не так.
Я получаю следующее сообщение об ошибке в моем окне вывода, которое, как я понимаю, означает, что он не разрешает RelativeSource:
System.Windows.Data Error: 40 : BindingExpression path error: 'Sonny' property not found on 'object' ''MyParentControl' (Name='Daddy')'. BindingExpression:Path=Sonny.Header.ActualHeight; DataItem='MyParentControl' (Name='Daddy'); target element is 'StackPanel' (Name='Header'); target property is 'Height' (type 'Double')
Любые идеичто я делаю не так?