C# 如何将可见性绑定到在用户控件中作为参数传递的元素?

C# 如何将可见性绑定到在用户控件中作为参数传递的元素?,c#,windows-phone-7,xaml,C#,Windows Phone 7,Xaml,我有用户控件,如下所示: public partial class TopBarUserControl : UserControl { public System.Windows.Visibility menuVisibility { get; set; } public TopBarUserControl() { InitializeComponent(); } } 在我的另一页中,我使用: <local:TopBarUserContr

我有
用户控件
,如下所示:

public partial class TopBarUserControl : UserControl
{
    public System.Windows.Visibility menuVisibility { get; set; }

    public TopBarUserControl()
    {
        InitializeComponent();
    }
}
在我的另一页中,我使用:

<local:TopBarUserControl />

或者在
code-behind
中设置它,但我不知道应该在哪里设置它。

这里有两件事,首先,理想情况下,您应该将属性声明为
dependencProperty
,这样您就可以绑定它并获得自动更改通知,以便在正确的时间更新UI。然后,您需要更正绑定,使其指向在
UserCoontrol
级别声明的属性(编写时,它绑定到
DataContext
,这可能无法设置)

在XAML中尝试以下操作:

<UserControl x:Class="WpfApplication1.TopBarUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300"
             x:Name="MainControl">   <!--Give a XAML name to the whole control to bind to properties declared in code-behind-->

    <Menu Visibility="{Binding ElementName=MainControl, Path=MenuVisibility}"/>
</UserControl>

您需要创建一个依赖项属性。
Visibility="{Binding menuVisibility}"
<UserControl x:Class="WpfApplication1.TopBarUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300"
             x:Name="MainControl">   <!--Give a XAML name to the whole control to bind to properties declared in code-behind-->

    <Menu Visibility="{Binding ElementName=MainControl, Path=MenuVisibility}"/>
</UserControl>
using System.Windows;
using System.Windows.Controls;

namespace WpfApplication1
{
    public partial class TopBarUserControl : UserControl
    {
        public static readonly DependencyProperty MenuVisibilityProperty = DependencyProperty.Register("MenuVisibility", typeof(Visibility), typeof(TopBarUserControl), null);

        public Visibility MenuVisibility
        {
            get { return (Visibility)GetValue(MenuVisibilityProperty); }
            set { SetValue(MenuVisibilityProperty, value); }
        }

        public TopBarUserControl()
        {
            InitializeComponent();
        }
    }
}