Я хочу установить свойство зависимости, которое я объявил в своем Class1, которое наследуется от DependencyObject:
public static readonly DependencyProperty MyMouseOverProperty = DependencyProperty.Register("MyMouseOver", typeof(bool), typeof(Class1),
new PropertyMetadata(false,new PropertyChangedCallback(On_MyMouseOver)));
private static void On_MyMouseOver(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
// some code here
}
public bool MyMouseOver
{
get { return (bool)GetValue(MyMouseOverProperty); }
set { SetValue(MyMouseOverProperty, value); }
}
Я буду использовать «MyMouseOver» в XAML, чтобы использовать его состояние в «On_MyMouseOver» для воздействия на другой объект.
<DataTemplate DataType = "{x:Type local:Class1}">
<Canvas x:Name = "Canvas_Classe1"
Background = "Transparent">
<Canvas.Triggers>
<Trigger Property = "IsMouseOver" Value = "True">
<Setter Property = "{Binding Path=MyMouseOver}" Value = "True"/>
</Trigger>
</Canvas.Triggers>
</Canvas>
но... это не работает.
Как использовать Setter для доступа к DependencyProperty, объявленному не в элементе управления, а в классе?





Вы можете сделать это с помощью прикрепленное имущество
public class Class1
{
public static readonly DependencyProperty MyMouseOverProperty = DependencyProperty.RegisterAttached(
"MyMouseOver", typeof(bool), typeof(Class1), new FrameworkPropertyMetadata(false, PropertyChangedCallback)
);
public static void SetMyMouseOver(UIElement element, Boolean value)
{
element.SetValue(MyMouseOverProperty, value);
}
public static bool GetMyMouseOver(UIElement element)
{
return (bool)element.GetValue(MyMouseOverProperty);
}
private static void PropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
// some code here
}
}
Установите прикрепленное свойство в DataTemplate IsMouseOver
<DataTemplate DataType = "{x:Type local:Class1}">
<Canvas x:Name = "Canvas_Classe1"
Background = "Black">
</Canvas>
<DataTemplate.Triggers>
<Trigger Property = "IsMouseOver" Value = "True">
<Setter Property = "local:Class1.MyMouseOver" Value = "True"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
В Class1 так же, как вы написали в вопросе «Я хочу установить свойство зависимости, которое я объявил в своем Class1». Вы можете заменить объявление DependencyProperty объявлением AttachedProperty, как в моем примере.
спасибо за ответ, но где находится «MyMouseOver» в добавленном вами коде C#?