簡體   English   中英

綁定達到的依賴項屬性的觸發器/設置器

[英]Trigger/Setter on dependency property reached by Binding

我想設置一個我在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

您可以使用附加屬性來完成此操作

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM