在另一个视图中绑定到控件的属性

时间:2017-07-04 08:56:27

标签: wpf xaml binding

我在视图中设置了使用dockpanels和alignments的控件的高度。 我想使用此控件的计算大小作为另一个视图中另一个控件的输入。

主窗口

<StackPanel>
    <local:View1 />
    <local:View2 />
</StackPanel>

视图1

<DockPanel>
    ...
        <Button x:Name="myButton" />
    ...
</DockPanel>

View2(我想将按钮的高度绑定到第一个视图)

<Button Height="{Binding Path=Button.Height, RelativeSource={RelativeSource AncestorType={x:Type local:View1}}}" />

但它不起作用......

我正在寻找具有绑定功能的xaml-only解决方案......

1 个答案:

答案 0 :(得分:0)

您可能想尝试使用依赖项属性来实现此目的。以下是基于您的案例的示例:

视图1:

<DockPanel>
        <Button x:Name="myButton" Content="Button in view1" FontSize="32"/>
    </DockPanel>

View1代码隐藏。请注意,我们处理加载的事件以获取按钮的实际高度并将其值分配给我们创建的DependencyProperty:

public static readonly DependencyProperty ButtonHeightProperty = DependencyProperty.Register(
            "ButtonHeight", typeof (double), typeof (View1), new PropertyMetadata(default(double)));

        public double ButtonHeight
        {
            get { return (double) GetValue(ButtonHeightProperty); }
            set { SetValue(ButtonHeightProperty, value); }
        }
        public View1()
        {
            InitializeComponent();
        }

        private void View1_OnLoaded(object sender, RoutedEventArgs e)
        {
            ButtonHeight = myButton.ActualHeight;
        }

然后在view2中,我们将按钮高度绑定到该用户控件中的另一个依赖项属性:

        

在view2中,代码隐藏:

public static readonly DependencyProperty ButtonHeightProperty = DependencyProperty.Register(
    "ButtonHeight", typeof (double), typeof (View2), new PropertyMetadata(default(double)));

public double ButtonHeight
{
    get { return (double) GetValue(ButtonHeightProperty); }
    set { SetValue(ButtonHeightProperty, value); }
}

public View2()
{
    InitializeComponent();
}

最后,mainWindow xaml看起来像这样:

<StackPanel>
    <local:View1 x:Name="View1"/>
    <local:View2 ButtonHeight="{Binding ElementName=View1,Path=ButtonHeight}"/>
</StackPanel>

输出:

enter image description here

希望这有帮助