2015-11-10 3 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

Вы можете зарегистрировать IsHighlighted как свойство вашего 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); } 
} 

EDIT использование добавления XAML

Ваш 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

Смежные вопросы