在xaml中声明的绑定不起作用

时间:2009-12-11 04:21:42

标签: wpf xaml binding actualwidth actualheight

我有一个包含网格的主窗口,在窗口加载事件期间,我将动态创建用户控件的实例并将其添加到网格中。为了让用户控制在调整主窗口大小时自我调整,我想将用户控件的宽度和高度绑定到网格的ActualWidthActualHeight

第一种方法是在代码中创建绑定对象,在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方法有什么问题吗?

1 个答案:

答案 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"/>

绑定问题是如果面板中的某些内容增加,ActualHeightActualWidth可能会增加。对StackPanel s尤其如此。

如果您使用Grid,则可能会与父ActualWidthActualHeight绑定。我发现它有时会起作用,但是面板中的某些东西常常会增加尺寸并使绑定变得混乱。