2013-07-16 15 views
0

我有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設置,但我不知道在哪裏,應該設置好的。

+2

你需要做的依賴PROPERT年。 – SLaks

回答

1

這裏有兩件事情,首先您應該理想地將屬性聲明爲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> 

注意結合有一個ElementName匹配x:Name在控制層 將你的財產轉換爲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(); 
     } 
    } 
} 
相關問題