簡體   English   中英

附屬物

[英]Attached Properties

我對WPF附加屬性有點困惑。 當您使用附加屬性時,附加屬性只能由定義它的類讀取和使用? 例如,如果我想在按鈕上使用一些附加屬性作為懸停顏色,我可以從按鈕的模板中獲取附加屬性值,並且我是否可以從按鈕訪問附加屬性來設置胡佛顏色?

使用示例添加HB的答案:

例如,如果我想在按鈕上使用一些附加屬性作為懸停顏色,我可以從按鈕的模板中獲取附加屬性值,並且我是否可以從按鈕訪問附加屬性來設置懸停顏色?

是的,你確定可以。 假設您在名為SomeClass的類中定義了名為HoverBrush的附加屬性,您可以在實例上設置值並在模板中綁定它

<StackPanel>
    <StackPanel.Resources>
        <ControlTemplate x:Key="MyButtonTemplate" TargetType="{x:Type Button}">
            <Border x:Name="border" Background="Gray">
                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
            </Border>
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter TargetName="border"
                            Property="Background"
                            Value="{Binding RelativeSource={RelativeSource TemplatedParent},
                                            Path=(local:SomeClass.HoverBrush)}"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </StackPanel.Resources>
    <Button Content="Blue Hover"
            local:SomeClass.HoverBrush="Blue"
            Template="{StaticResource MyButtonTemplate}"/>
    <Button Content="Green Hover"
            local:SomeClass.HoverBrush="Green"
            Template="{StaticResource MyButtonTemplate}"/>
</StackPanel>

所討論的附屬物是這樣定義的

public class SomeClass
{
    public static DependencyProperty HoverBrushProperty =
        DependencyProperty.RegisterAttached("HoverBrush",
                                            typeof(Brush),
                                            typeof(SomeClass),
                                            new PropertyMetadata(null));
    public static void SetHoverBrush(DependencyObject obj, Brush value)
    {
        obj.SetValue(HoverBrushProperty, value);
    }
    public static Brush GetHoverBrush(DependencyObject obj)
    {
        return (Brush)obj.GetValue(HoverBrushProperty);
    }
}

你看過概述了嗎? 如果沒有,那就去做吧。

附加屬性(如依賴項屬性 )只是注冊可以在控件的屬性字典中使用的另一個鍵。 您可以在任何地方設置值,您可以在任何地方檢索它們,它們不受類型的限制。 這意味着您可能只希望在按鈕上設置它,但也可以在TextBoxes上設置它。

每個控件都有自己的屬性鍵和值字典,附加屬性允許您使用新鍵將值寫入這些字典。 由於這些字典是獨立的,因此它們可以為通過靜態字段屬性聲明設置和訪問的同一屬性具有單獨的值。

當附加這些屬性時,您必須通過GetValue獲取值(因為類本身不能提供CLR包裝器)。

暫無
暫無

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

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