【问题标题】:Trigger/Setter on dependency property reached by Binding绑定到达的依赖属性的触发器/设置器
【发布时间】:2019-06-27 09:49:23
【问题描述】:

我想设置一个我在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); }
    }

我将在 XAML 中使用“MyMouseOver”,以便在“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 声明的不是在控件中而是在类中?

【问题讨论】:

    标签: c# xaml binding dependency-properties


    【解决方案1】:

    您可以通过attached property 完成此操作

    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>
    

    【讨论】:

    • 感谢您的回复,但是您添加的 C# 代码中的“MyMouseOver”在哪里?
    • 在 Class1 中,与您在问题“我想设置我在 Class1 中声明的依赖属性”中所写的相同。您可以将 DependencyProperty 声明替换为 AttachedProperty 声明,如我的示例中所示
    猜你喜欢
    • 2019-03-14
    • 2012-07-30
    • 2011-08-04
    • 1970-01-01
    • 2016-04-04
    • 2021-11-08
    • 2019-12-21
    • 2016-11-29
    • 1970-01-01
    相关资源
    最近更新 更多