如何将Visibility绑定到在用户控件中作为参数传递的元素
本文关键字:参数传递 元素 控件 用户 Visibility 绑定 | 更新日期: 2023-09-27 18:22:35
我有User control
,它看起来像这样:
public partial class TopBarUserControl : UserControl
{
public System.Windows.Visibility menuVisibility { get; set; }
public TopBarUserControl()
{
InitializeComponent();
}
}
我在我的另一个页面上呈现了它:
<local:TopBarUserControl />
它工作得很好,但我想隐藏我的控制部分。所以我用传递参数进行控制
<local:TopBarUserControl menuVisibility="Collapsed" />
但我不知道如何让它正常工作(隐藏我的元素)。我尝试过的:
在xaml对照中:
Visibility="{Binding menuVisibility}"
或者在code behind
中设置它,但我不知道它应该设置在哪里。
这里有两件事,首先,您应该理想地将属性声明为DependencyProperty
,这样您就可以绑定它,并获得自动更改通知,以便在正确的时间更新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>
请注意,绑定具有与控制级别的x:Name
匹配的ElementName
。将您的房产转换为DependencyProperty
:
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();
}
}
}