[英]WPF Custom Control with Dependency Property binding to DockPanel.Dock Attached Property not working
[英]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.