我有一个包含网格的主窗口,在窗口加载事件期间,我将动态创建用户控件的实例并将其添加到网格中。为了让用户控制在调整主窗口大小时自我调整,我想将用户控件的宽度和高度绑定到网格的ActualWidth
和ActualHeight
。
第一种方法是在代码中创建绑定对象,在window_loaded事件中的相同位置
Binding widthBinding = new Binding("ActualWidth");
widthBinding.Source = panel;
BindingOperations.SetBinding(uc, WidthProperty, widthBinding);
Binding heightBinding = new Binding("ActualHeight");
heightBinding.Source = panel;
BindingOperations.SetBinding(uc, HeightProperty, heightBinding);
panel.Children.Add(uc);
它按预期工作。
第二种方法是在用户控件的xaml文件中使用xaml绑定,
<UserControl x:Class="S2T.RAHS2.ContentAcquisition.FileViewer.WordViewer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="UserControl_Loaded" Unloaded="UserControl_Unloaded"
Width="{Binding ElementName=ContainerElement, Path=ActualWidth}"
Height="{Binding ElementName=ContainerElement, Path=ActualHeight}">
或
<UserControl x:Class="S2T.RAHS2.ContentAcquisition.FileViewer.WordViewer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="UserControl_Loaded" Unloaded="UserControl_Unloaded"
Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}, AncestorLevel=1}, Path=ActualWidth}"
Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}, AncestorLevel=1}, Path=ActualHeight}">
但这不起作用。
我可以知道xaml方法有什么问题吗?
答案 0 :(得分:0)
您可以尝试使用对齐而不是绑定吗?
<UserControl x:Class="S2T.RAHS2.ContentAcquisition.FileViewer.WordViewer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="UserControl_Loaded" Unloaded="UserControl_Unloaded"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
绑定问题是如果面板中的某些内容增加,ActualHeight
和ActualWidth
可能会增加。对StackPanel
s尤其如此。
如果您使用Grid
,则可能会与父ActualWidth
和ActualHeight
绑定。我发现它有时会起作用,但是面板中的某些东西常常会增加尺寸并使绑定变得混乱。