如何从另一个Control中获取UserControl中的对象

时间:2016-05-13 07:12:40

标签: c# wpf

我的WPF应用中有 MainWindow MenuControl EditorControl

当我点击Button中的“获取高度”MenuControl时,我想在StackPanel中获取Height的{​​{1}}。

如何在EditorControl中获取StackPanel对象?

MenuControl.xaml:

EditorControl

EditorControl.xaml:

<Button Content="Get Height" Click="GetStackPanelHeight_Click"/>

MenuControl.xaml.cs:

<StackPanel x:Name="xxxx">
    <Label Context="test">
</StackPanel>

无法访问xxxx.AcutualHeight。

如果我在下面写,tmp = 0

public void GetStackPanelHeight_Click(object sender, RoutedEventArgs e)
{
    var tmp = xxxx.ActualHeight;       
}

我该怎么做?

2 个答案:

答案 0 :(得分:1)

最快的解决方案之一是: 在EditorControl中,您可以获得StackPanel ActualHeight的价值。

例如: 将StackPanel的{​​{1}}值传递到ActualHeight内的DependencyProperty。 当推送EditorControl中的Button时,请读取该依赖项属性的值。

答案 1 :(得分:0)

你可以这样做:

public class FirstUserControl
{
    public delegate void PropertyChangedHandler(object obj);
    public static event PropertyChangedHandler StackPanelHeightChanged = delegate { };
    public void GetStackPanelHeight_Click(object sender, RoutedEventArgs e)
    {
        //Example: here I fire the function in the second UC
        var tmp = xxxx.ActualHeight; 
        StackPanelHeightChanged(tmp);
    }
}

-

public class SecondUserControl
{
    public SecondUserControl()
    {
        FirstUserControl.StackPanelHeightChanged+= OnStackPanelHeightChanged;
    }

    public void OnStackPanelHeightChanged(object obj)
    {
        //here obj is the Height of the StackPanel
    }

    //....
}