2015-11-10 107 views
2

我有按鈕自定義視圖:XAML:從父視圖設置屬性?

<UserControl> 
... 
<Rectangle x:Name="Highlight" Style="{DynamicResource HighlightStyle}"/> 
... 
<DataTrigger Binding="{Binding Path=IsHighlighted}" Value="true"> 
            <Setter TargetName="Highlight" Property="Opacity" Value="1"/> 
           </DataTrigger> 
... 
</UserControl> 

而且按鈕被父視圖中使用像未來:

<local:MyButton x:Name="Btn1" DataContext="{Binding Path=Btn1}" /> 

所以,當我需要按鈕高亮我從代碼中這樣做。像Btn1.IsHighlighted=true; 但在某些時候,我需要直接從父XAML設置。可能嗎?

I.e.在一些具體的觀點,我不想Btn1.IsHighlighted被使用。相反,我想是這樣的:

<local:MyButton x:Name="Btn1" DataContext="{Binding Path=Btn1}" IsHighlighted="true" /> 

回答

5

你可以爲你的myButton的類

private static readonly DependencyProperty IsHighlightedProperty = DependencyProperty.Register 
(
    "IsHighlighted", 
    typeof(bool), 
    typeof(MyButton), 
    new PropertyMetadata((bool)false) 
); 

public bool IsHighlighted 
{ 
    get { return (bool) GetValue(IsHighlightedProperty); } 
    set { SetValue(IsHighlightedProperty, value); } 
} 

編輯添加XAML使用的財產IsHighlighted註冊

你myButton的XAML應該有這樣的事情

<Rectangle x:Name="Highlight" Width="100"> 
    <Rectangle.Style> 
     <Style TargetType="Rectangle"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsHighlighted}" Value="True"> 
        <Setter Property="Opacity" Value="1" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Rectangle.Style> 
</Rectangle> 

我在這裏實際測試了Property =「Fill」和Value =「Green」。但改爲符合你的情況。

父視圖應該有

<local:MyButton x:Name="Btn1" DataContext="{Binding Path=Btn1}" IsHighlighted="true" /> 
+0

然後DataTrigger的如何結合應該看?因爲現在它不適用於我的Binding =「{Binding Path = IsHighlighted}」 – Ksice

+0

您之前定義的IsHighlighted屬性在哪裏?哪些類設置爲DataContext? – romerotg

+0

它在MyButtonModel類中...所以如果有另一個模型類在使用,你的解決方案將無法工作? – Ksice