如果父元素位于 WPF 中的另一个文件中,如何绑定到父元素
本文关键字:元素 何绑定 绑定 另一个 WPF 文件 如果 | 更新日期: 2023-09-27 18:34:28
>我有一个"详细信息视图",需要在其他视图之间共享。
使用"详细信息视图"的视图示例
此代码位于用户控件中 ParentView.xaml
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*" Name="detailsRowDefinition"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0"...>
<StackPanel Grid.Row=1 HorizontalAlignment="Center">
<!--This is what I'd like to get ActualHeight from-->
<!--I've tried to get ActualHeight from the RowDefinition as well-->
<ContentControl Name="detailsView" Content="{Binding Details}"/>
</StackPanel>
</Grid>
然后另一个 xaml 文件确保上面ContentControl
中的 {绑定详细信息} 正常工作,并且它正确呈现我的详细信息视图。
现在,在另一个文件DetailsView.xaml
(也是用户控件(中
<TabControl>
<TabItem Header="Part A">
<!--This is the blasted ScrollViewer that I can't set the height on-->
<ScrollViewer Height="{Binding Path=ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=RowDefinition}}" >
<!--Lots of crap-->
</ScrollViewer>
</TabItem>
<TabItem Header="Part B">
</TabItem>
<!--etc-->
<TabControl>
我尝试了不同的绑定变体,例如ElementName
和设置AncestorLevel
非常高等。
我要得到的答案是这样的:如何在 WPF 中将高度设置为自动的情况下使滚动查看器工作?除了我需要绑定到嵌入this
用户控件的用户控件的父元素
这个问题的答案似乎是我想做的,但在代码片段方面没有任何帮助。如何获取具有行定义高度 * 的网格的实际网格行高
RowDefinition 不充当包含 contol,因此您无法将其作为祖先找到。但是你并不真正需要它,你可以使用父面板(在你的例子中是StackPanel(:
<TabItem Header="Part A">
<ScrollViewer Height="{Binding ActualHeight, RelativeSource={RelativeSource FindAncestor, AncestorType=StackPanel}}">
<TextBlock Text="Here we are" />
</ScrollViewer>
</TabItem>
为了节省时间,我决定为 SizeChanged 提供一个事件处理程序,就像Parent.xaml
的<UserControl SizeChanged="Control_SizeChanged">
元素
private void Control_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (e.HeightChanged)
{
var height = this.detailsRowDefinition.ActualHeight;
this.detailsView.Height = height;
}
}