簡體   English   中英

如何擴展此依賴項屬性示例以重新創建DockPanel.Dock =“ Top”之類的依賴項屬性?

[英]How can I extend this dependency property example to recreate a DockPanel.Dock=“Top”-like dependency property?

我試圖更好地了解什么不是依賴屬性。 我建立了下面的示例,該示例使組合框的選擇可以根據用戶移動滑塊的方式進行更改。

在創建此代碼時,我了解到依賴屬性實際上與ViewModel屬性中使用的INotifyPropertyChanged沒有關系,簡化了以下示例。

但是現在我將如何從下面的示例重新創建DockPanel.Dock="Top"所示的依賴屬性,例如,這樣我就可以啟用以下類型的XAML使用:

<local:ExtendedComboBox 
    Margin="5 5 5 0"
    DataIdCode="{Binding ElementName=TheSource, Path=Value}">
    <Image local:ExtendendedComboBox="Left" ... />
    <TextBlock local:ExtendendedComboBox="Right" ... />
</local:ExtendedComboBox>

這可能嗎? 並且這與下面更直接的示例中的依賴屬性使用方式相同,還是像INotifyPropertyChanged這樣,這也是WPF中的一種綁定技術?

這是滑塊/組合框示例:

XAML:

<Window x:Class="TestDependency9202.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:TestDependency9202"
    Title="Window1" Height="300" Width="300">
    <StackPanel>
        <StackPanel
            Margin="5 5 5 0"
            Orientation="Horizontal">
            <TextBlock Text="Customers"
                       Margin="0 0 3 0"/>
            <Slider x:Name="TheSource"
                HorizontalAlignment="Left"
                Value="0"
                Width="50"
                SnapsToDevicePixels="True"
                Minimum="0"
                Margin="0 0 3 0"
                Maximum="1"/>
            <TextBlock Text="Employees"/>
        </StackPanel>
        <local:ExtendedComboBox 
            Margin="5 5 5 0"
            DataIdCode="{Binding ElementName=TheSource, Path=Value}"/>
    </StackPanel>
</Window>

代碼隱藏:

using System.Windows;
using System.Windows.Controls;
using System.ComponentModel;

namespace TestDependency9202
{
    public partial class ExtendedComboBox : ComboBox
    {
        public static readonly DependencyProperty DataIdCodeProperty =
            DependencyProperty.Register("DataIdCode", typeof(string), typeof(ExtendedComboBox),
                new PropertyMetadata(string.Empty, OnDataIdCodePropertyChanged));

        private static void OnDataIdCodePropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
        {
            ExtendedComboBox extendedComboBox = dependencyObject as ExtendedComboBox;
            extendedComboBox.OnDataIdCodePropertyChanged2(e);
        }

        private void OnDataIdCodePropertyChanged2(DependencyPropertyChangedEventArgs e)
        {
            if (DataIdCode == "0")
            {
                Items.Clear();
                Items.Add("customer1");
                Items.Add("customer2");
                Items.Add("customer3");
            }
            else if (DataIdCode == "1")
            {
                Items.Clear();
                Items.Add("employee1");
                Items.Add("employee2");
                Items.Add("employee3");
            }
            this.SelectedIndex = 0;
        }


        public string DataIdCode
        {
            get { return GetValue(DataIdCodeProperty).ToString(); }
            set { SetValue(DataIdCodeProperty, value); }
        }

        public ExtendedComboBox()
        {
            InitializeComponent();
        }
    }

}

這種依賴性屬性稱為Attached Property 這基本上是用於另一個對象的依賴項屬性。 您正在使用DependencyProperty.RegisterAttached創建它們,並提供了兩種獲取和設置它們的靜態方法。 請參閱上面的鏈接

暫無
暫無

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

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