2014-11-21 42 views
0

2個元素我有用戶控件這樣的:設置可見真或假的使用依賴屬性

它是頭的用戶控制,我使用這個控制幾頁,

<Grid> 
      <TextBlock Grid.Column="1" Style="{StaticResource PuzzleTalkHeader}" Text="{Binding Path=LocalizedResources.GlobalApplicationTitle, Source={StaticResource LocalizedStrings}}" Grid.ColumnSpan="2"/> 
      <Image x:Name="imgCoin" Grid.Column="3" Height="24" Width="24" Source="/Assets/Images/Coin.png" /> 
      <TextBlock x:Name="tbxEarnPoints" Grid.Column="5" Text="15000"/> 
     </Grid> 

我想設置一個屬性是這樣的:isVisibleEarnPoints="True"

<UserControls:Header Grid.Row="0" isVisibleEarnPoints="True"/> 

如果isVisibleEarnPoints="True"的話,我想imgCointbxEarnPoints應visiable和我f它是假的,那麼這些元素隱藏

我想這樣的事情,但我不能得到的結果,你能幫助我嗎?

public partial class Header : UserControl 
    { 
     public Header() 
     { 
      InitializeComponent(); 

     } 

     //public bool isVisiableEarnPoints 
     //{ 
     // set 
     // { 
     //  if(value) 
     //  { 
     //   imgCoin.Visibility = Visibility.Visible; 
     //   tbxEarnPoints.Visibility = Visibility.Visible; 
     //  } 
     //  else 
     //  { 
     //   imgCoin.Visibility = Visibility.Collapsed; 
     //   tbxEarnPoints.Visibility = Visibility.Collapsed; 
     //  } 
     // } 
     //} 

     public int isVisiableEarnPoints { get; set; } 

     public static readonly DependencyProperty DisplayTypeProperty = DependencyProperty.Register("isVisiableEarnPoints", typeof(isVisiableEarnPoints), typeof(Header), new PropertyMetadata(YourDPCallBack)); 

     private static void YourDPCallBack(DependencyObject instance, DependencyPropertyChangedEventArgs args) 
     { 
      Header control = (Header)instance; 

     } 
    } 
} 

更新提問按照註釋:

[1]:

public partial class Header : UserControl 
    { 
     public Header() 
     { 
      InitializeComponent(); 

     } 

     private bool _isisVisiableEarnPoints; 
     public bool isVisiableEarnPoints 
     { 
      get{ 

       return _isisVisiableEarnPoints; 
      } 
      set 
      { 
       _isisVisiableEarnPoints=value; 
      } 
     } 
    } 

,然後結合該屬性是這樣的:

<Image x:Name="imgCoin" Grid.Column="3" Height="24" Width="24" Source="/Assets/Images/Coin.png" Visibility="{Binding isVisiableEarnPoints, Converter={StaticResource VisibilityConverter}}" /> 
     <TextBlock x:Name="tbxEarnPoints" Grid.Column="5" Text="15000" Visibility="{Binding isVisiableEarnPoints, Converter={StaticResource VisibilityConverter}}" /> 

和在用戶控件中使用這樣的:

<UserControls:Header Grid.Row="0" isVisiableEarnPoints="False"/> 

但它仍然不工作!

回答

0

爲此INT控件XAML,你要隱藏/顯示綁定你改變分配也Converter到他們中的每一個bool財產,以轉換布爾值receeved到合適Visibility財產的控制。

這裏實際上是實現自定義轉換器的具體的例子:

Using a value converter to bind to Visibility in the Silverlight data grid (這是一個Silverlight,但概念是相同的)

或者乾脆可以使用由框架提供BooleanToVisibilityConverter如果其行爲符合您的要求。

+0

做= 「{結合真/假,轉換器= {StaticResource的VisibilityConverter}}」? – patel 2014-11-21 14:33:15

+0

@patel:正確 – Tigran 2014-11-21 14:33:54

+0

先生,我想創建像這樣的新屬性: patel 2014-11-21 14:50:14

0

這很簡單..但是爲什麼你想創建依賴項屬性,你可以直接附加viewmodel屬性來控制你所擁有的可見性。

但是,如果你想創建一個像IsVisibleEarnPoints這樣的新屬性,那麼你必須創建DP。你要我寫能見度

對於Eg.`

public partial class YOUCLASS: UserControl 
    { 
     public YOUCLASS() 
     { 
      InitializeComponent(); 


     } 
public static readonly DependencyProperty IsVisibleEarnPointsProperty = 
      DependencyProperty.Register("IsVisibleEarnPoints", typeof(bool), typeof(YOURCLASS), new UIPropertyMetadata((bool)false, OnStateChange)); 

     public bool IsVisibleEarnPoints 
     { 
      get 
      { 
       return (bool)GetValue(IsVisibleEarnPointsProperty); 
      } 
      set 
      { 
       SetValue(IsVisibleEarnPointsProperty , value); 
      } 
     } 

     private static void OnStateChange(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
      if (e.NewValue is bool) 
      { 
       var source = (YOURCLASS)d; 
       source.SetState((bool)e.NewValue); 
      } 
     } 

     public void SetState(bool isDisabled) 
     { 

if(isDisabled) 
{ 
imgecoin.Visibility=Visibility.Visible; 
//same for other control 
} 
else 
{ 
// Do whatever you want. 
} 




    }`